34

私は拡張可能なリストを保持するアプリケーションを設計してきました。すべてのリストの最後で、空のEditTextコメントを受け取る準備ができています。次の問題があります。をタッチすると、画面のサイズがわずかに変更され(レイアウトとリストEditTextの位置によっては、サイズ変更が常に行われるとは限らないため、問題ありません)、ソフトキーボードが表示されます。EditTextただし、これらのイベント中に、EditTextフォーカスを失い、それを取り戻すことはありません。キーボードが使用可能であるにもかかわらず、フォーカスがない場合、キーボードからの入力がに到達しないため、これは非常に不便EditTextです。もう一度触れると、EditText期待どおりに動作します。

それはさらに奇妙になります。キーボードが表示されたままの状態で、別のタッチを行うことができますEditText。同じことが起こります。それは焦点を失います。ただし、最初のフォーカスの喪失を通過すると、EditTextフォーカスに関連する問題なしに、以前に触れたものの間を自由に移動できます。ソフトキーボードを非表示にした場合にのみ、「状態」が消え、EditText編集する前にsを2回タップする必要があります。

これが私のコードからの抜粋です。まず、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;
    }
});

マニフェストファイルに特定の入力を指定していませんが、役立つと思われる場合は提供できます。

アップデート:

Activityパンを調整するためにに線を追加するとandroid:windowSoftInputMode="adjustPan"、問題は部分的に解決されます。これは、現在の予期しない動作を、EditTextビューがソフトキーボードによって隠される可能性があるという問題に置き換えます。

現在のところ、理想的な解決策は見つかりませんでしたが、近づいています。受け入れられた回答のコメントを見てください、それらはあなたに役立つかもしれません!

4

7 に答える 7

45

AndroidManifest.xmlを変更する必要があります

android:windowSoftInputMode="adjustPan"リストビューを保持しているアクティビティを追加します。これはあなたの問題を解決します。

<activity android:name=".MyEditTextInListView"
          android:label="@string/app_name"
          android:windowSoftInputMode="adjustPan">
于 2013-02-06T10:55:07.730 に答える
13

解決策は、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);
        }
    }
});
于 2013-08-07T05:47:46.483 に答える
2

私は同じ問題を抱えていました...私はEditTextを拡張することによってそれを解決しました。

onClickListenerを作成し、このメソッドで次のコードを取得しました。

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

次に、次のコードをonKeyPreImeコールバックに配置しました。EditTextにアクセスするには、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);
}

最初のクリックでキーボードを起動するには、フォーカス可能なフラグを切り替える必要があります。これがお役に立てば幸いです...私のために働きます。

于 2013-03-07T09:29:39.830 に答える
1

あなたは次のようなことを試すことができます:

editText.requestFocus();

これを設定することもできます:

android:windowSoftInputMode="stateHidden"

マニフェストファイル

于 2013-02-06T10:55:06.403 に答える
0

以下のコードをandroidmanifest.xmlで試すことができます

androidマニフェストandroid:windowSoftInputMode="adjustPan"にコードを追加します

また、xmlレイアウトに追加します

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

于 2013-02-06T10:57:50.053 に答える
0

私はこの問題を抱えていましたandroid.support.design.widget.TextInputEditTextが、マニフェストのフラグの順序を次のように変更することで解決しました。

android:windowSoftInputMode="stateHidden|adjustPan"

android:windowSoftInputMode="adjustPan|stateHidden"
于 2016-11-21T23:43:35.240 に答える
0

に加えてandroid:windowSoftInputMode="adjustPan"、以下を試してください。

  1. に設定android:descendantFocusability="afterDescendants"しますListView
  2. に設定android:focusable="true"android:focusableInTouchMode="true"ますEditText
于 2019-08-21T21:47:15.527 に答える