Android软键盘处理

弹起来的时候

  • 第一个参数View,最好是 EditText 或者它的子类。
  • 布局必须加载完成。(通过延时加载的方式来解决,View.postDelayed() 是一个解决方案)

隐藏的时候

  • 需要依赖于一个view
  • 还是通过延迟处理来完成,会有效果

如果还是没效果,那就把时间弄大点,比如300ms

软键盘隐藏部分组件的处理 TODO

https://www.jianshu.com/p/89eec61fa699

/**
     * 软键盘显示
     *
     * @param view
     */
    @RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
    public static void showSoftKeyboard(final View view) {
        if (view == null) {
            return;
        }
        view.setFocusable(true);
        view.setFocusableInTouchMode(true);
        if (!view.isFocused()) {
            view.requestFocus();
        }

        view.postDelayed(new Runnable() {
            @Override
            public void run() {
                InputMethodManager inputMethodManager = (InputMethodManager) view.getContext()
                        .getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.showSoftInput(view, 0);
            }
        }, 100);
    }
/**
     * 软键盘隐藏
     *
     * @param view
     */

   public static void hideSoftKeyboard(final View view) {
        if (view == null) {
            return;
        }

        view.postDelayed(new Runnable() {
            @Override
            public void run() {
                InputMethodManager manager = (InputMethodManager) view.getContext()
                        .getSystemService(Context.INPUT_METHOD_SERVICE);
                manager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }, 100);
    }
/**
 * 选取屏幕高度的2/3来判断 软键盘是否弹出
 * @param context
 * @return
 */
public static boolean isSoftShowing(Context context) {
    // 获取当前屏幕内容的高度
    int screenHeight = ((Activity)context).getWindow().getDecorView().getHeight();
    // 获取View可见区域的bottom
    Rect rect = new Rect();
    // DecorView即为activity的*view
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
        ((Activity)context).getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
    }
    // 考虑到虚拟导航栏的情况(虚拟导航栏情况下:screenHeight = rect.bottom + 虚拟导航栏高度)
    // 选取screenHeight*2/3进行判断
    return screenHeight*2/3 > rect.bottom;
}

上一篇:程序员到底有没有必要买一台阿里云服务器?


下一篇:干掉 Postman?测试接口直接生成API文档,这个工具贼好用