我想在我的控件(EditText)中实现类似“beforeLosingFocus”的事件,我希望能够阻止焦点更改,因此我的控件必须具有焦点,直到用户键入允许的值。
我尝试使用onFocusChange事件,但在焦点更改后会触发此事件。 此事件被触发两次(因为一个控件失去焦点而另一个控件得到它)。
可以防止另一个控件以通用方式获得焦点吗? (因为焦点可以通过在另一个控件中点击或“下一步”键点击来改变)
答案 0 :(得分:1)
有两种方法可以做到这一点:
1)默认情况下,将所有其他观看的setFocusable
属性保留为 false 。然后根据您的逻辑逐个启用它们。
2)调用onFocusChangedListener
时,使用v.requestFocus()
将焦点设置回所需的视图。
答案 1 :(得分:1)
editText.setOnEditorActionListener {
...
if (actionId == EditorInfo.IME_ACTION_NEXT) {
return true // if you want to ignore IME_ACTION_NEXT
return false // if you want to lose focus and go further
}
...
}
答案 2 :(得分:0)
覆盖EditText的OnFocusChangeListener,为“in activity”更改和覆盖导航按钮'OnClicks以执行完整性测试。
修改强> (如果我证明阅读有帮助,抱歉)
您提到知道如何覆盖EditText中的onFocusChange(View view, boolean state)
以强制用户通过选中if(state == false)
来输入文本。但是您还发现,当用户单击导航按钮(如Next)时,onFocusChange在开始新活动之前从不被调用。
如果您有多个EditText(例如用户名和密码),请保留onFocusChange 和在Next按钮的onClickListener中添加一个检查,以验证用户是否在EditText 之前,您开始一项新活动。