使EditText失去焦点单击按钮

时间:2012-11-30 11:36:32

标签: android android-edittext

我的活动中有两个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上。如何在单击按钮

时使EditText字段松散焦点

7 个答案:

答案 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);