• Android 软键盘自动弹出和关闭


    在我们写修改信息或者搜索,修改密码等界面的时候,用户进入这个界面的主要目的就是输入修改/查找 某些信息,为了用户体验应该自动弹出软键盘而不是让用户主动点击输入框才弹出。

    1.软键盘的自动弹出

    private void showKeyboard(){
            InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.showSoftInput(editText, 0);
        }

    对于界面比较复杂的情况的时候,软键盘可能无法正常的弹出,需要延迟加载。即在界面加载完成之后,弹出软键盘

    • 1.1 使用 定时器 schedule
    Timer timer = new Timer();
             timer.schedule(new TimerTask()   {
                 public void run() {
                     InputMethodManager inputManager = (InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                     inputManager.showSoftInput(editText, 0);
                 }
             }, 998);
    • 1.2 使用 handler
      这里写图片描述

      这里写图片描述

    2.软键盘的关闭

    我遇到过一种情况是,首页是scrollView 包裹的界面,滚动一段距离后进入下一个页面,会弹出软键盘,当关闭该界面的时候(即直接 finish()),回到首页的时候,scrollView 不是原来的位置了。处理办法就是 在有软键盘弹出的页面,先关闭软键盘,再 finish()界面。

    private void closeKeyboard() {
            View view = getWindow().peekDecorView();
            if (view != null) {
                InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }

    3.软键盘把某些布局挤上去了的情况

    <activity
                    android:name=".activity.DetailActivity"
                    android:screenOrientation="portrait"
                    android:windowSoftInputMode="adjustPan"
                    android:theme="@style/AppTheme.NoActionBar.Translucent"/>

    主要就是 windowSoftInputMode 这个属性,其中2个比较重要的是 adjustPan 和 adjustResize
    adjustPan 不会把底部的布局给挤上去,例如relateLayout 布局中 放到bottom 的布局
    adjustResize 是自适应的,会把底部的挤上去。

    更详细的可以了解下 windowSoftInputMode 这个属性,好多大神的博客上都有说明,我这就不赘述了。

  • 相关阅读:
    MySQL性能调优my.cnf详解
    Linux学习之CentOS(二十八)--RAID原理基础及Linux下软件RAID配置
    Linux学习之CentOS(二十)--CentOS6.4下修改MySQL编码方法
    Linux学习之CentOS(二十一)--Linux系统启动详解
    Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码
    Linux下oracle数据库启动和关闭操作
    编程之美——判断一个数是否为2的幂
    编程之美——求两个整数不同位数的个数
    LeetCode——Increasing Triplet Subsequence
    LeetCode——Find Minimum in Rotated Sorted Array II
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6957448.html
Copyright © 2020-2023  润新知