多EditText页面如何清除输入焦点

开发中,如果需要清空EditText的输入焦点,一般情况下都需要使用EditText.clearFocus()
但在当一个页面中有多个EditText输入框时,clearFocus有时却无效,清空焦点之后,焦点会重新回到第一个EditText。
那么是不是说明clearFocus在多EditText情况下无效呢?

当然不是,之所以有时候发现EditText.clearFocus()无效是因为:清除focus之后,还会按照先序遍历的顺序查找一个focusInTouchMode的View,并将其设置为focus。而EditText恰好是这第一个符合条件的View。相当于在清除焦点之后,又重新设置成了焦点。

知道了原因之后,解决方法就出来了:找一个在EditText之前的View,并将其设置为可获得焦点focusableInTouchMode

1
2
android:focusableInTouchMode="true"
View.setFocusableInTouchMode(true);

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

判断是否focus:

  • isFocused()
    判断自己是否拥有焦点
  • hasFocus()
    它判断自己或着自己的child是否拥有焦点
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×