Android 键盘相关灵异事件

2019-11-20  本文已影响0人  暮雨沉沦

1、在ListView或者RecyclerView中,item里的EditView无法打开键盘
需求是这样的,左滑点击item上的一个按钮后进行编辑,然而一直弹不出键盘。
发现是在item的根布局下加了如下代码:

android:descendantFocusability = "blocksDescendants"

删掉就好啦
descendantFocusability 直译是后代聚焦能力的意思,所以字段是控制父控件与子控件的聚焦能力的。

属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

一开始代码中写的blocksDescendants,当然会拦截掉子view的焦点啦。当然不同情况还要具体分析,这个属性只是一个分析点。

2、键盘无法隐藏的灵异事件:
有这么个隐藏键盘的方法:

   protected void hideSoftInputFromWindow( View view, Context context) {
        InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0)
   }

发现调用了没什么用,然后在有些页面又很灵,有些页面又不灵。搜了半天也为这里flag写错了,一直都没什么用。
其实,在有些页面复杂一些,包含了列表控件,当调用隐藏键盘的方法时,被页面的大量刷新操作阻塞了,导致隐藏没有生效,有效的方法是延时调用此方法,让一拨主线程的任务先过去,再来触发效果很好。
在开发其他功能也是如此,比如有时候发现弹框偶尔弹不出来,可能就是类似问题,主线程执行的任务太多,阻塞住了,都可以同样的思路解决。这告诉我们,虽然都是主线程中干的活,也扛不住一次执行太多,不如少执行一点,多来几个循环

上一篇 下一篇

猜你喜欢

热点阅读