Android 当虚拟键盘消失时,对编辑文本失去焦点
我对一些文本字段有点问题。当我关闭虚拟键盘时,我想失去对它们的关注Android 当虚拟键盘消失时,对编辑文本失去焦点,android,Android,我对一些文本字段有点问题。当我关闭虚拟键盘时,我想失去对它们的关注 searchByName.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { v.getLayoutParams
searchByName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
v.getLayoutParams().width = 900;
searchByZipcode.setVisibility(View.INVISIBLE);
searchByDistance.setVisibility(View.INVISIBLE);
} else {
v.getLayoutParams().width=405;
searchByZipcode.setVisibility(View.VISIBLE);
searchByDistance.setVisibility(View.VISIBLE);
}
}
});
searchByZipcode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
searchByZipcode.getLayoutParams().width=660;
searchByName.setVisibility(View.INVISIBLE);
}
});
searchByZipcode.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
/* When focus is lost check that the text field
* has valid values.
*/
if (hasFocus) {
v.getLayoutParams().width=663;
searchByName.setVisibility(View.INVISIBLE);
} else {
v.getLayoutParams().width=240;
searchByName.setVisibility(View.VISIBLE);
}
}
});
searchByName.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if(keyCode == KeyEvent.KEYCODE_ENTER)
{
searchByName.clearFocus();
return true;
}
else
{
return false;
}
}
});
searchByZipcode.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if(keyCode == KeyEvent.KEYCODE_ENTER)
{
searchByZipcode.clearFocus();
return true;
}
else
{
return false;
}
}
});
searchByDistance.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if(keyCode == KeyEvent.KEYCODE_ENTER)
{
searchByDistance.clearFocus();
return true;
}
else
{
return false;
}
}
});
比方说,我选择一个字段,在其中写入一些内容,然后按back键关闭键盘。在这种情况下,我希望自动失去对所选文本字段的关注
这是我到目前为止试过的。问题是,如果我在searchByName
中按done(回车),它会立即切换到第二个文本字段(searchByZipcode
),但不会应用focuschange监听器。它仅在我关闭键盘后适用
searchByName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
v.getLayoutParams().width = 900;
searchByZipcode.setVisibility(View.INVISIBLE);
searchByDistance.setVisibility(View.INVISIBLE);
} else {
v.getLayoutParams().width=405;
searchByZipcode.setVisibility(View.VISIBLE);
searchByDistance.setVisibility(View.VISIBLE);
}
}
});
searchByZipcode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
searchByZipcode.getLayoutParams().width=660;
searchByName.setVisibility(View.INVISIBLE);
}
});
searchByZipcode.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
/* When focus is lost check that the text field
* has valid values.
*/
if (hasFocus) {
v.getLayoutParams().width=663;
searchByName.setVisibility(View.INVISIBLE);
} else {
v.getLayoutParams().width=240;
searchByName.setVisibility(View.VISIBLE);
}
}
});
searchByName.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if(keyCode == KeyEvent.KEYCODE_ENTER)
{
searchByName.clearFocus();
return true;
}
else
{
return false;
}
}
});
searchByZipcode.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if(keyCode == KeyEvent.KEYCODE_ENTER)
{
searchByZipcode.clearFocus();
return true;
}
else
{
return false;
}
}
});
searchByDistance.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
if(keyCode == KeyEvent.KEYCODE_ENTER)
{
searchByDistance.clearFocus();
return true;
}
else
{
return false;
}
}
});
要执行此操作,您可以通过以下操作清除当前焦点:
@Override
public void onBackPressed() {
super.onBackPressed();
View view = getCurrentFocus();
if (view != null) {
view.clearFocus();
}
}
我应该把这个放在哪里?我忘了提到我的文本字段是一个片段。我想我必须在MainActivity
中使用这个覆盖函数,对吗?是的,这应该在您的活动中。