EditText loses focus when keyboard appears; requires touching twice to edit

帅比萌擦擦* 提交于 2019-12-02 18:00:32
jlopez

You need to change in your AndroidManifest.xml

Add android:windowSoftInputMode="adjustPan" in the activity holding the listview. This will solve your problem.

<activity android:name=".MyEditTextInListView"
          android:label="@string/app_name"
          android:windowSoftInputMode="adjustPan">

A solution is to post a delayed runnable that checks to see if the EditText view is still focused, and if it is not, focus it.

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(final View v, boolean hasFocus) {
        if (hasFocus) {
            // Request focus in a short time because the
            // keyboard may steal it away.
            v.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (!v.hasFocus()) {
                        v.requestFocus();
                    }
                }
            }, 200);
        }
    }
});

I had the same problem...I solved it by extending EditText.

I created an onClickListener and in this method I've got the following code:

public OnClickListener clickListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        EditTextInput.this.setFocusable(true);
        EditTextInput.this.setFocusableInTouchMode(true);
        EditTextInput.this.requestFocus();
    }
};       

I then placed the following code in the onKeyPreIme callback. You'll have to extend EditText to get access to it.

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK & event.getAction() == KeyEvent.ACTION_UP) {
        EditTextInput.clearFocus();
        EditTextInput.this.setFocusable(false);
        EditTextInput.this.setFocusableInTouchMode(false);            
        return false;
    }
    return super.dispatchKeyEvent(event);
}

I find I have to toggle the focusable flag in order to bring the keyboard up on the very first click. Hope this helps...works for me.

You could try something like :

editText.requestFocus();

You could also set this :

android:windowSoftInputMode="stateHidden"

in your manifest file

you can try this below code to android manifest.xml

add the code to android manifest android:windowSoftInputMode="adjustPan"

And also add to xml layout

<EditText  
      android:background="#FFFFFF"
      android:capitalize="sentences"
      android:inputType="textVisiblePassword"
      android:layout_height="35px"
      >
      <requestFocus /> 

I had this problem with android.support.design.widget.TextInputEditText and it was solved from changing the flag order in manifest from:

android:windowSoftInputMode="stateHidden|adjustPan"

to

android:windowSoftInputMode="adjustPan|stateHidden"

In addition to android:windowSoftInputMode="adjustPan", try below:

  1. Set android:descendantFocusability="afterDescendants" to your ListView.
  2. Set android:focusable="true" and android:focusableInTouchMode="true" to your EditText.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!