Android - 当getCurrentFocus()。clearFocus()

时间:2017-05-09 13:11:53

标签: android android-fragments android-activity android-fragmentactivity

我在使用EditText或其他输入/选择器时遇到一些麻烦,而不是当前正在播放的视图/片段。我的新片段在创建时调用了传递片段中的EditText或picker。

我知道解决这个问题的方法。我可以在requestFocus()上使用一些虚拟视图。 或者有时候(而且那个问题)在activity.getCurrentFocus().clearFocus();上 但对于最后一个看起来失败了1/2。

所以这是我的问题:如何工作getCurrentFocus(),他是否只检查当前活动视图或儿童片段?为什么每次都不工作?

如果有人带领这一点,将会感恩:D

1 个答案:

答案 0 :(得分:0)

如果获得焦点的视图每次都可以尝试这样的事情,那么:

View current = getCurrentFocus();
if (current != null) {
current.clearFocus();
}

如果使用 clearFocus()并不像您找到的那样工作,您可以:

<LinearLayout 
android:id="@+id/my_layout" 
android:focusable="true" 
android:focusableInTouchMode="true" ...>

到最顶层的布局视图(线性布局)。要从所有Buttons / EditTexts等中删除焦点,您只需执行

即可
LinearLayout myLayout = (LinearLayout) activity.findViewById(R.id.my_layout);
myLayout.requestFocus();

来自文档

  

当View清除焦点时,框架会尝试从顶部开始关注第一个可聚焦视图。因此,如果此视图是从顶部开始可以获得焦点的第一个视图,则将调用与清除焦点相关的所有回调,之后框架将关注此视图。

希望这有帮助。