输入法软键盘自动隐藏/显示(递归遍历是否是EditText,是则显示,反之则隐藏)

需求场景:假设一个界面上有EditText,或者item中有EditText,使用EditText必然导致输入法软键盘显示隐藏,用户总是手动点击关闭关键盘体验稍微差一些。

因此:该工具类借鉴他人的一些方法,采用了一种比较便捷的方式:递归根布局,查看根布局的子View如果是非EditText,则设置Touch事件关闭软键盘,反之则继续递归。

先上效果图:

代码量非常少,核心代码就是一个递归算法:

    /**

    * the function is recursive until the ViewGroup don't have childView

    *

    * @param view the root view in your layout

    */

    public void setRootView(View view) {

        if (view != null) {

            if (!(view instanceof EditText)) {

                if (view != null) {

                    view.setOnTouchListener(new View.OnTouchListener() {

                        @Override

                        public boolean onTouch(View view, MotionEvent motionEvent) {

                            InputMethodUtils.getInstance(mActivity).hideSoftInput();

                            return false;

                        }

                    });

                }

            }

            if (view instanceof ViewGroup) {

                for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

                    View inView = ((ViewGroup) view).getChildAt(i);

                    setRootView(inView);

                }

            }

        }else{

            throw new NullPointerException("root view is null");

        }

    }

使用方式:

一:在build.gradle中添加依赖

Step 1. Add the dependency

dependencies {

        compile 'cn.walkpast.filbert:RecursInputMethod:1.0.2'

}

二:给xxx.xml 布局的根布局添加id

三:在onCreate中一行代码:

RecursInputMethod

                .getInstance()

                .setActivity(this)

                .setRootView(findViewById(R.id.root_layout))

                .build();

完整代码已上传GitHub

https://github.com/KernHu/FilbertTool

可以直接依赖,比较方便使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,535评论 0 17
  • 手帐,是今年我才接触了解到的一个东西。一开始我对手帐的定义只是一本记录to do list,用来管理时间和记录人生...
    林潇Ena阅读 281评论 0 0
  • 开始在简书上发文8月30日,那个时候还不知道平台的规则,好奇心驱使,想要多学习。后来规则清楚后,我开始了正式的写作...
    风shuo阅读 1,122评论 24 27
  • 《我愿意》中经典语录 无意中打开电视看了中央六套电影《我愿意》,因为主演是孙红雷、段奕宏、李冰冰,所以就慢慢看下去...
    未来星星阅读 1,309评论 0 0
  • 勇敢地去做,去行动, 早睡早起这块,为了保证晚上能早睡,必须学会早起,所以每天在六点起床,这样就可以保证早睡了 开...
    心我听你说阅读 192评论 0 0