当键盘出现时,EditText失去焦点; 需要触摸两次才能编辑

我一直在devise一个包含可扩展列表的应用程序。 在每个列表的最后,一个空的EditText准备好接收评论。 我有以下问题; 当我触摸EditText ,屏幕稍微resize(不是一个问题,因为resize并不总是发生,这取决于我的布局和EditText int列表的位置),软键盘出现。 但是,在这些事件中, EditText失去了重点,并没有重新获得它。 这是非常不方便的,因为没有焦点,尽pipe键盘可用,键盘input没有达到EditText 。 一旦我再次触摸它, EditText行为如预期。

它变得更加陌生。 随着键盘仍然显示,我可以触摸不同的EditText并发生相同的情况; 它失去了重点。 但是,一旦我通过了最初的焦点丢失,我可以在以前触摸的EditText之间自由移动,没有任何焦点相关的问题。 只有当我隐藏软键盘时,“状态”消失,我需要点击EditText两次,才能编辑它们。

这里是我的代码摘录。 首先, empty_comment.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/blank_box" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textCapSentences" android:imeOptions="actionDone" android:hint="@string/hint" android:layout_marginLeft="30dip" > </EditText> </LinearLayout> 

这里是我使用布局的片段摘录:

 convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_empty, null); final EditText editText = (EditText) convertView.findViewById(R.id.blank_box); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId == EditorInfo.IME_ACTION_DONE) { // Unrelated code } return true; } }); 

我没有在清单文件中指定任何特定的input,但如果认为有帮助,我可以提供它。

更新:

添加一行到Activity调整泛android:windowSoftInputMode="adjustPan"部分解决了这个问题。 它将用当前的意外行为replace为软键盘隐藏EditText视图的问题。

到目前为止,还没有find理想的解决scheme,但接近。 看看接受的答案中的意见,他们可能会certificate对你有用!

Solutions Collecting From Web of "当键盘出现时,EditText失去焦点; 需要触摸两次才能编辑"

您需要在AndroidManifest.xml中进行更改

在持有列表视图的活动中添加android:windowSoftInputMode="adjustPan" 。 这将解决您的问题。

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

解决scheme是发布延迟的runnable,检查EditText视图是否仍然聚焦,如果不是,则将其聚焦。

 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); } } }); 

我有同样的问题…我通过扩展EditText来解决它。

我创build了一个onClickListener,在这个方法中,我得到了下面的代码:

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

然后,我将下面的代码放在onKeyPreImecallback中。 您将不得不扩展EditText才能访问它。

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

我发现我必须切换可调焦的标志,以便在第一次点击时使键盘正常工作。 希望这有助于…为我工作。

你可以尝试像这样:

 editText.requestFocus(); 

你也可以设置:

 android:windowSoftInputMode="stateHidden" 

在你的清单文件中

你可以尝试下面的代码到android manifest.xml

将代码添加到Android清单android:windowSoftInputMode =“adjustPan”

并添加到XML布局

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

我有这个问题与android.support.design.widget.TextInputEditText ,它是从更改清单中的标志顺序解决:

 android:windowSoftInputMode="stateHidden|adjustPan" 

 android:windowSoftInputMode="adjustPan|stateHidden"