检测 EditTexts 的 none 是否有焦点
Detect if none of the EditTexts has focus
我的 activity 中有一些 EditText。问题很简单:如果其中 none 个有焦点,我将显示一个按钮。如果其中任何一个有焦点,我将隐藏按钮。
这是我所做的:
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 更改为另一个时,按钮会在焦点更改之间暂时可见。我想消除它。关于如何实现它的任何建议?
进一步详细说明用户在填写用户名字段后单击密码字段时的问题:
按钮不可见
- 用户名字段有焦点
onFocusChange()
的用户名字段被调用
- 用户名字段失去焦点
按钮可见
onFocusChange()
密码字段被调用
- 密码字段获得焦点。
按钮不可见
很明显,在第 3 点和第 4 点之间,用户名字段和密码字段都没有焦点。在那一小段时间里,按钮变得可见,这是我试图摆脱的。
试试这个:
if(parentView.getCurrentFocus() instanceof EditText)
{
//Hide Buttom
}else{
// Show Button
}
在焦点更改侦听器中调用调整可见性之前,只需检查其他编辑文本是否没有焦点,如下所示。
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();
}
});
看看这是否能解决您的问题。
如果不想在从一个编辑文本切换到另一个编辑文本之间显示,请设置一些延迟
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);
}
}
我的 activity 中有一些 EditText。问题很简单:如果其中 none 个有焦点,我将显示一个按钮。如果其中任何一个有焦点,我将隐藏按钮。
这是我所做的:
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 更改为另一个时,按钮会在焦点更改之间暂时可见。我想消除它。关于如何实现它的任何建议?
进一步详细说明用户在填写用户名字段后单击密码字段时的问题:
按钮不可见
- 用户名字段有焦点
onFocusChange()
的用户名字段被调用- 用户名字段失去焦点
按钮可见
onFocusChange()
密码字段被调用- 密码字段获得焦点。
按钮不可见
很明显,在第 3 点和第 4 点之间,用户名字段和密码字段都没有焦点。在那一小段时间里,按钮变得可见,这是我试图摆脱的。
试试这个:
if(parentView.getCurrentFocus() instanceof EditText)
{
//Hide Buttom
}else{
// Show Button
}
在焦点更改侦听器中调用调整可见性之前,只需检查其他编辑文本是否没有焦点,如下所示。
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();
}
});
看看这是否能解决您的问题。
如果不想在从一个编辑文本切换到另一个编辑文本之间显示,请设置一些延迟
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);
}
}