我的活动中有一些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
onFocusChange()
的用户名字段被称为按钮是可见的
onFocusChange()
密码字段被调用BUTTON INVISIBLE
显然,在第3点和第4点之间,用户名字段和密码字段都没有焦点。在那么短的时间内,按钮变得可见,这正是我想要摆脱的。
答案 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();
}
});
看看这是否能解决您的问题。