开发中,如果需要清空EditText的输入焦点,一般情况下都需要使用EditText.clearFocus()
。
但在当一个页面中有多个EditText输入框时,clearFocus
有时却无效,清空焦点之后,焦点会重新回到第一个EditText。
那么是不是说明clearFocus在多EditText情况下无效呢?
当然不是,之所以有时候发现EditText.clearFocus()无效是因为:清除focus之后,还会按照先序遍历的顺序查找一个focusInTouchMode的View,并将其设置为focus。而EditText恰好是这第一个符合条件的View。相当于在清除焦点之后,又重新设置成了焦点。
知道了原因之后,解决方法就出来了:找一个在EditText之前的View,并将其设置为可获得焦点focusableInTouchMode
。
1 | android:focusableInTouchMode="true" |
如果不知道怎样找到一个在EditText之前的View的话,可以直接选择它的parent。
判断是否focus:
- isFocused()
判断自己是否拥有焦点 - hasFocus()
它判断自己或着自己的child是否拥有焦点