检测是否所有EditTexts都没有焦点

时间:2016-06-01 10:11:37

标签: android android-edittext focus

我的活动中有一些EditTexts。问题很简单:如果没有焦点,我会显示一个按钮。如果其中任何一个有焦点,我会隐藏按钮。

这就是我的所作所为:

    usernameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            usernameFocus = hasFocus;
            adjustVisibility();
        }
    });

    passwordEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            passwordFocus = hasFocus;
            adjustVisibility();
        }
    });

    private void adjustVisibility() {
        if(usernameFocus || passwordFocus) {
            button.setVisibility(View.GONE);
        } else {
            button.setVisibility(View.VISIBLE);
        }
    }

问题: 当我将焦点从一个EditText更改为另一个时,按钮在焦点更改之间暂时可见。我想消除它。有关如何实现它的任何建议?

在用户填写用户名字段后点击密码字段时进一步详细说明问题:

BUTTON INVISIBLE

  1. 用户名字段具有焦点
  2. onFocusChange()的用户名字段被称为
  3. 用户名字段失去焦点
  4. 按钮是可见的

    1. onFocusChange()密码字段被调用
    2. 密码字段获得焦点。
    3. BUTTON INVISIBLE

      显然,在第3点和第4点之间,用户名字段和密码字段都没有焦点。在那么短的时间内,按钮变得可见,这正是我想要摆脱的。

3 个答案:

答案 0 :(得分:1)

如果您不想在从一个edittext切换到其他

之间显示,请稍等一些
  private void adjustVisibility() {
    if (usernameFocus || passwordFocus) {
        mButtonVisible.setVisibility(View.GONE);
    } else {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // Do something after 5s = 5000ms
                if (usernameFocus || passwordFocus) {
                    mButtonVisible.setVisibility(View.GONE);
                } else {
                    mButtonVisible.setVisibility(View.VISIBLE);
                }
            }
        }, 5000);
    }
}

答案 1 :(得分:0)

试试这个:

if(parentView.getCurrentFocus() instanceof EditText)
{
   //Hide Buttom
}else{
   // Show Button
}

答案 2 :(得分:0)

在焦点更改侦听器调用adjust visibility之前,只需检查其他编辑文本是否没有像下面这样的焦点。

 usernameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        usernameFocus = hasFocus;
        if(!passwordEditText.hasFocus())
        adjustVisibility();
    }
});

passwordEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        passwordFocus = hasFocus;
        if(!usernameEditText.hasFocus())
        adjustVisibility();
    }
});

看看这是否能解决您的问题。