我的活动中有两个EditText
字段,并且已完成button
。当用户按下按钮时,我希望EditText
字段都松开焦点(即光标不应该显示在它们中的任何一个上)。我使用以下代码:
final Button saveButton = (Button) findViewById(R.id.saveButton);
saveButton.setOnClickListener(saveButtonListener);
private OnClickListener saveButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
Text1.clearFocus();
Text2.clearFocus();
}
}
然而,当我按下完成按钮时,即使我还没有点击任何Text1
,光标也会出现在EditText
上。如何在单击按钮
答案 0 :(得分:22)
尝试将代码更改为:
private OnClickListener saveButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
Text1.clearFocus();
Text2.clearFocus();
saveButton.requestFocus(); //or any other View
}
}
因为关于public void clearFocus ()的文档:
当此视图想要放弃焦点时调用。如果焦点被清除 调用onFocusChanged(boolean,int,android.graphics.Rect)。
注意:当视图清除焦点时,框架会尝试提供焦点 到顶部的第一个可聚焦的视图。因此,如果这个视图是 首先从顶部开始可以关注,然后所有回调都与之相关 在框架给出之后将调用清除焦点 专注于这种观点。
表示您必须在按钮点击时将焦点设置为其他视图,因为Text1
充当您的布局中的第一个视图
答案 1 :(得分:5)
您可以尝试使用此代码,只需将焦点移至另一个视图。
private OnClickListener saveButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
saveButton.requestFocus(); //any other View
}
}
答案 2 :(得分:3)
我能找到的最佳方式是
private void listenToButton(){
someButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
v.requestFocusFromTouch();
//Proceed with things
}
}
}
答案 3 :(得分:1)
这对我有用:
@Override
public void onClick(View v) {
//To hide soft keyboard
InputMethodManager im = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
v.requestFocusFromTouch();
}
答案 4 :(得分:1)
为该按钮设置这些行就可以了。
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setFocusable(true);
v.setFocusableInTouchMode(true);
v.requestFocus();
......
}
};
button.setOnClickListener(listener);
适合我:)
答案 5 :(得分:0)
您可以在布局中创建一个空的隐藏EditText
元素。宽度为0,高度为0的东西。然后,在您的点击中,您可以拨打hiddenEditText.requestFocus()
;
答案 6 :(得分:-1)
点击按钮时使用以下代码: -
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);