4

我想为我的控件(EditText)实现类似“beforeLosingFocus”事件,并且我希望能够防止焦点更改,因此我的控件必须具有焦点,直到用户键入允许的值。

我尝试使用 onFocusChange 事件,但是在焦点更改后会触发此事件。此事件被触发两次(因为一个控件失去焦点,而另一个控件获得焦点)。

是否可以防止另一个控件以通用方式获得焦点?(因为焦点可以通过点击另一个控件或“下一步”键单击来改变)

4

3 回答 3

2
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
        }
    ...
    }
于 2017-09-29T14:00:26.433 回答
1

有两种方法可以做到这一点:1)默认情况下将所有其他视图的setFocusable属性保持为false。然后根据您的逻辑,一一启用它们。

2)当onFocusChangedListener被调用时,将焦点设置回您想要使用的视图v.requestFocus()

于 2012-04-15T15:21:50.340 回答
0

使用“活动中”更改覆盖您的 EditText 的 OnFocusChangeListener覆盖导航按钮的 OnClick 以执行完整性测试。

编辑 (如果我校对它会有所帮助,对不起)

您提到知道如何覆盖onFocusChange(View view, boolean state)EditText 以强制用户通过检查来输入文本if(state == false)。但是您还发现,当用户单击导航按钮(如 Next)时,在开始新活动之前永远不会调用 onFocusChange。

因此,如果您有多个 EditText(例如用户名和密码)请保留 onFocusChange,并在 Next 按钮的 onClickListener 中添加一个检查,以在您开始新活动之前验证用户是否在 EditText 中输入了文本。

于 2012-04-15T15:08:26.953 回答