21

我的活动中有两个EditText字段和一个 done 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。如何使 EditText 字段放松对单击按钮的关注

4

7 回答 7

29

尝试将您的代码更改为:

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在您的布局中充当第一个视图

于 2012-11-30T11:47:41.093 回答
5

您可以尝试此代码,只需将焦点移至另一个视图。

private OnClickListener saveButtonListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        saveButton.requestFocus(); //any other View
    }

}
于 2012-11-30T12:11:00.980 回答
4

我能找到的最好方法是

private void listenToButton(){
    someButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            v.requestFocusFromTouch();
            //Proceed with things
        }
    }
}
于 2015-10-01T01:12:32.587 回答
3

这对我有用:

@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();

}
于 2016-09-10T04:30:31.823 回答
1

为该按钮设置这些行就可以了。

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        v.requestFocus();
        ......
    }
};
button.setOnClickListener(listener);

为我工作:)

于 2016-10-05T21:29:55.583 回答
0

您可以EditText在布局中创建一个空的隐藏元素。具有 0 宽度和 0 高度的东西。然后在您的点击中您可以调用hiddenEditText.requestFocus()

于 2012-11-30T11:49:35.393 回答
-1

在按钮单击时使用以下代码:-

InputMethodManager imm = (InputMethodManager) view.getContext()
    .getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
于 2012-11-30T11:59:42.743 回答