【发布时间】:2020-04-21 19:01:54
【问题描述】:
我在编辑文本焦点更改时指定了不同的背景,但clearFocus() 似乎没有效果,因为背景没有更改为正确的状态。
【问题讨论】:
-
能否详细说明您的问题
-
请发布您尝试过的内容。除非我们看到代码,否则很难说什么。
标签: android button android-edittext android-softkeyboard
我在编辑文本焦点更改时指定了不同的背景,但clearFocus() 似乎没有效果,因为背景没有更改为正确的状态。
【问题讨论】:
标签: android button android-edittext android-softkeyboard
首先,我们可以使用cleareFocus 方法来移除焦点。
editTextView.clearFocus()
但是当这个方法被调用时,正如源码注释所说:
当不处于触摸模式时,框架将在焦点被清除后尝试将焦点赋予从顶部开始的第一个可焦点视图。因此,如果这 视图是从顶部开始的第一个可以获取焦点的,然后是所有回调 与清除焦点相关的将被调用,之后框架将 关注这个观点。
所以在你调用它之后,第一个元素将保持焦点。所以我们应该在父布局中设置touch-mode true。
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
<EditText android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
【讨论】:
再创建一个 EditText(edit_hidden) 并设置可见性 GONE 或 INVISIBLE
当您想从 EditText(edit_your) 中清除焦点时,请使用此代码
edit_your.clearFocus();
edit_hidden.requestFocus();
使用 Action Done 事件
edit_your.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_DONE){
edit_your.clearFocus();
edit_hidden.requestFocus();
}
return false;
}
});
【讨论】: