Android 使EditText在单击按钮时失去焦点

Android 使EditText在单击按钮时失去焦点,android,android-edittext,Android,Android Edittext,我的活动中有两个EditText字段和一个done按钮。我希望当用户按下按钮时,EditText两个字段都失去焦点(即光标不应显示在其中任何一个字段上)。我正在使用以下代码: final Button saveButton = (Button) findViewById(R.id.saveButton); saveButton.setOnClickListener(saveButtonListener); private OnClickListener saveButtonListen

我的活动中有两个
EditText
字段和一个done
按钮
。我希望当用户按下按钮时,
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字段在单击按钮时失去焦点,请尝试将代码更改为:

private OnClickListener saveButtonListener = new OnClickListener() {

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

}
因为作为文档作为关于:

当此视图要放弃焦点时调用。如果焦点被清除 调用onFocusChanged(boolean、int、android.graphics.Rect)

注意:当视图清除焦点时,框架将尝试给予焦点 从顶部到第一个可聚焦视图。因此,如果该视图是 首先从顶部开始,可以集中精力,然后是与 清除焦点将在框架给出 关注这个观点


意味着您必须在单击按钮时将焦点设置为其他视图,因为
Text1
作为布局中的第一个视图

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

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

InputMethodManager imm = (InputMethodManager) view.getContext()
    .getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

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

private OnClickListener saveButtonListener = new OnClickListener() {

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

}

我能找到的最好办法是

private void listenToButton(){
    someButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            v.requestFocusFromTouch();
            //Proceed with things
        }
    }
}
这对我很有用:

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

}

为按钮设置这些行,按钮将起作用

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

适用于我:)

1)创建对编辑文本的静态引用。2) 在setOnFocusChange方法中,将静态编辑文本设置为获得焦点的编辑文本3)在按钮单击方法中,使用此引用了解上次包含焦点的人,即使他们的焦点没有因为按钮单击而丢失。对我来说,它像一个字符一样工作。它将数字键盘更改为其他奇数数字键盘。它只在第一次起作用。然后奇怪的事情发生了