我想为我的控件(EditText)实现类似“beforeLosingFocus”事件,并且我希望能够防止焦点更改,因此我的控件必须具有焦点,直到用户键入允许的值。
我尝试使用 onFocusChange 事件,但是在焦点更改后会触发此事件。此事件被触发两次(因为一个控件失去焦点,而另一个控件获得焦点)。
是否可以防止另一个控件以通用方式获得焦点?(因为焦点可以通过点击另一个控件或“下一步”键单击来改变)
我想为我的控件(EditText)实现类似“beforeLosingFocus”事件,并且我希望能够防止焦点更改,因此我的控件必须具有焦点,直到用户键入允许的值。
我尝试使用 onFocusChange 事件,但是在焦点更改后会触发此事件。此事件被触发两次(因为一个控件失去焦点,而另一个控件获得焦点)。
是否可以防止另一个控件以通用方式获得焦点?(因为焦点可以通过点击另一个控件或“下一步”键单击来改变)
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
}
...
}
有两种方法可以做到这一点:1)默认情况下将所有其他视图的setFocusable
属性保持为false。然后根据您的逻辑,一一启用它们。
2)当onFocusChangedListener
被调用时,将焦点设置回您想要使用的视图v.requestFocus()
。
使用“活动中”更改覆盖您的 EditText 的 OnFocusChangeListener并覆盖导航按钮的 OnClick 以执行完整性测试。
编辑 (如果我校对它会有所帮助,对不起)
您提到知道如何覆盖onFocusChange(View view, boolean state)
EditText 以强制用户通过检查来输入文本if(state == false)
。但是您还发现,当用户单击导航按钮(如 Next)时,在开始新活动之前永远不会调用 onFocusChange。
因此,如果您有多个 EditText(例如用户名和密码),请保留 onFocusChange,并在 Next 按钮的 onClickListener 中添加一个检查,以在您开始新活动之前验证用户是否在 EditText 中输入了文本。