clearFocus()方法无效原因和解决办法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010356768/article/details/81806053

原因

清除focus其实包含2个部分的操作:
清除当前View的focus标志,并且清除它的祖先节点中存储的mFocus信息
调用DecorView的requestFocus()方法,重新寻找一个View,并将其设置为focus

requestFocus()都是以先序遍历的方式,找到第一个focusInTouchMode的View,并将其设置为焦点

所以,之所以有时候发现EditText.clearFocus()无效,是因为:清除focus之后,还会按照先序遍历的顺序查找一个focusInTouchMode的View,并将其设置为focus,而你的EditText恰好是这第一个符合条件的View。(因此不是没清除成功,而是清除了之后,又给设置上了)

解决办法

知道了原因之后,解决就很简单了。找一个在EditText之前的View,将其设置为可获得焦点的

代码中
View.setFocusableInTouchMode(true)
或在布局中
android:focusableInTouchMode="true"

如果不知道怎样找到一个在EditText之前的View的话,可以直接选择它的parent (xxxLayout)

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/81806053
今日推荐