Android - 如何防止视图焦点更改?

时间:2012-04-15 15:03:18

标签: android android-layout

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

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

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

3 个答案:

答案 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 之前,您开始一项新活动。