当另一个EditText清晰焦点

时间:2015-10-15 19:16:55

标签: android focus

在我的活动中,我得到了一些EditText。当我从一个主题中移除焦点并使其不可聚焦时,焦点将放在另一个EditText上。我以这种方式删除焦点:

atxtTag.setFocusable(false);
atxtTag.setFocusableInTouchMode(false);
atxtTag.clearFocus();

我不知道将焦点转移到另一个EditText上的内容。我尝试通过从第一个元素中删除焦点后将焦点设置在另一个视图上来实现此目的。所以我把重点放在主要布局上,女巫是ScrollView,但它没有用。

如何在不将其转移到另一个EditText上的情况下将焦点移到一个EditText上?

谢谢。

2 个答案:

答案 0 :(得分:3)

clearFocus方法implementationclearFocusInternal调用传递true作为refocus参数的值。这导致第一个可聚焦元素的请求焦点。因此,一个可能的解决方案是通过反射调用clearFocusInternal(true, false);,但我实际上没有检查过。

深入requestFocus implementation我发现它会检查根视图的DescendantFocusability。使用它我已经构建了一个可行的解决方案:

ViewGroup rootView = (ViewGroup) atxtTag.getRootView();
int dfValue = rootView.getDescendantFocusability();
rootView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
atxtTag.clearFocus();
rootView.setDescendantFocusability(dfValue);

此外,清除焦点不会隐藏软件键盘,因此您可能还需要隐藏它:

InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(atxtTag.getWindowToken(), 0);

答案 1 :(得分:0)

您可以更改清单文件:

android:focusable="false"
android:focusableInTouchMode="false"