zoukankan      html  css  js  c++  java
  • Android 判断软键盘弹出并隐藏的简单完美解决方案

      最近项目中有一个编辑框,下面是个ListView。在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击。这样的体验效果很不好。于是便想在滑动或单击item时判断键盘是否弹出,若弹出,则把它隐藏。

      网上一搜,发现Android并没有直接提供软键盘的弹出与隐藏判断,一些解决方案诸如判断父控件的高度或者判断

    if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
      隐藏键盘;

    的方法并没有用,于是便从官方文档着手。

      发现InputMethodManager有一个方法isActive(View view):如果view是输入法的活动view,则返回true。也就是说,如果是由view触发弹出软键盘,则返回true。哇,那问题就好办了

    if(isActive(edittext))
        隐藏键盘

    然而,第一次弹出键盘后再进行其它触摸操作,键盘确实消失了。但这个时候再进行其它触摸操作(即单击item),view的输入仍是激活的。因为我的代码中item的单击事件是

    public void onItemClick(...){
      if(isActive(edittext)){
        隐藏键盘
      }else{
        其它操作
      }
    }

     所以我的item的其它操作并没有执行。再看看InputMethodManager的函数,找到一个函数restartInput(View view):如果当前输入法与view连接,用新内容重启输入法。重启?那么view的输入法将变成默认的未激活咯?于是便在隐藏输入法后面加入了这个函数,果然,成功了。

      这个方法比较简单,代码比较短,也很好理解,希望能够帮助有需要的人,也不枉费我调试几个小时的功夫。

      附上代码:

    InputMethodManager inputMethodManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    private boolean hideKeyboard(){
            if(inputMethodManager.isActive(searchEditText)){
              //因为是在fragment下,所以用了getView()获取view,也可以用findViewById()来获取父控件
                getView().requestFocus();//强制获取焦点,不然getActivity().getCurrentFocus().getWindowToken()会报错
                inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                inputMethodManager.restartInput(searchEditText);
                return true;
            }
            return false;
        } 
  • 相关阅读:
    @SpringBootApplication
    springboot自动装配介绍
    WebServerInitializedEvent &ApplicationRunner
    springboot 潜入式web容器
    Unable to import maven project: See logs for details
    spring boot2 运行环境
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war
    DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing
    idea中maven下载jar包不完整问题
    Python_报错:SyntaxError: EOL while scanning string literal
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5915250.html
Copyright © 2011-2022 走看看