45

私の問題:ソフトウェアキーボードが画面に2回目に表示されたときから、EditTextが完全に非表示になります。

属性android:windowSoftInputMode = "adjustPan"がAndroidManifest.xmlで指定されていますが、これは初めて機能します。

私は次のレイアウトを持っています:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="464dp"
        android:gravity="top"
        android:orientation="vertical"
        android:paddingLeft="16dp"
        android:paddingRight="16dp" >

        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="10"
            android:background="#E3E3E2"
            android:gravity="top" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <EditText
                android:id="@+id/addListText"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="10"
                android:contentDescription="@string/addItemContentDescription"
                android:gravity="bottom|center_horizontal"
                android:inputType="textLongMessage"
                android:textColor="#E3E3E2"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/addTextListButton"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:layout_gravity="right"
                android:background="@android:color/transparent"
                android:contentDescription="@string/addItemButton"
                android:scaleType="fitCenter"
                android:src="@drawable/plus_add"
                android:visibility="gone" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:gravity="bottom|center_horizontal"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingRight="16dp" >

        <ImageButton
            android:id="@+id/syncListsButton"
            android:layout_width="64dp"
            android:layout_height="match_parent"
            android:src="@android:drawable/ic_popup_sync" />

        <ImageButton
            android:id="@+id/showOrHide"
            android:layout_width="64dp"
            android:layout_height="match_parent" />

        <ImageButton
            android:id="@+id/delListButton"
            android:layout_width="64dp"
            android:layout_height="match_parent"
            android:src="@android:drawable/ic_menu_delete" />
    </LinearLayout>
</LinearLayout>

「showOrHide」ボタンは、「addListText」/「addTextListButton」コンボを表示/非表示にします。

EditTextが初めて表示されてタッチすると、ソフトキーボードが画面に表示され、「addListText」/「addTextListButton」コンボが正しくパンされます。キーボードを非表示にしてから再度表示すると、キーボードがaddListTextエディットボックスを完全に覆います。

何が起こっているのかについて何か考えはありますか?Android4.2.2でテストしています。

助けてください!ありがとう :-)

編集:最初のLinearLayoutをScrollView内に配置しようとしましたが、機能しません!

4

8 に答える 8

81

これは少しばかげているように見えるかもしれませんが、EditTextのプロパティの重力を「center_horizo​​ntal」または「center」に設定すると、この問題が発生しました。textAlignment'center'を使用する場合にも同じ問題が発生します。それを削除すれば、キーボードが出てきたときに、キーボードがEditTextを2回目(およびそれ以降)に非表示にするという問題に遭遇することはありません。

于 2014-09-24T12:34:54.133 に答える
54

EditTextをサブクラス化し、次のようにメソッドonKeyPreIme(int keyCode、KeyEvent event)をオーバーライドしました。

   @Override
   public boolean onKeyPreIme(int keyCode, KeyEvent event)
   {
      if(keyCode == KeyEvent.KEYCODE_BACK)
        {
            clearFocus();
        }
   return super.onKeyPreIme(keyCode, event);
   }

これで、戻るキーを押すと、EditTextがフォーカスを失いました。次に、もう一度タップすると、adjustpanが機能します。

于 2013-04-09T07:51:05.190 に答える
9

あなたが経験している問題は、ここで説明されているように、既知のプラットフォームのバグです:https ://code.google.com/p/android/issues/detail?id=182191

修正はバックポートされないため、Android Nまで有効になりません。AndroidNが最小のSDKになるまで、次の解決策が回避策です。

EditTextを拡張するカスタムクラスを作成し、次のようにメソッドonKeyPreIme(int keyCode、KeyEvent event)をオーバーライドできます。

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
   if(keyCode == KeyEvent.KEYCODE_BACK)
     {
         clearFocus();
     }
return super.onKeyPreIme(keyCode, event);
}

また、EditTextのフォーカスが正常にクリアされるように、より高いレベルのレイアウトにフォーカスできる機能があることを確認する必要があります。次の属性が機能する場合があります。

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

これで、戻るキーを押すと、EditTextはフォーカスを失います。次にボタンをもう一度タップすると、adjustpanが意図したとおりに機能します。(編集が拒否されたため、回答として投稿します。)

于 2016-04-12T19:09:43.823 に答える
1

これが私が最初に使用していたコードで、この問題が発生しました。

    <EditText
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:gravity="center" />

EditTextから重心線を削除すると、パンが機能しました。

android:gravity="center"

EditTextをFrameLayoutでラップし、EditText全体をFrameLayoutの中央に配置することで回避しました。それが引き起こす1つの問題は、EditTextが少なくともヒントテキストの幅になるため、入力された最初の数文字/単語が中央に配置されないことです。これは私にとっては問題ありませんでしたが、マイレージは異なる場合があります:)

<FrameLayout
    android:layout_width="250dp"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
</FrameLayout>

編集:ユーザーが編集テキストの最後の単語をクリックすると、この回避策は機能しなくなります。現在、onKeyPreImeの回避策を使用しています

于 2016-02-07T02:55:43.410 に答える
1

私にとって、オーバーライドonKeyPreImeは機能しません。代わりにオーバーライドしますdispatchKeyEventPreIme

@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
     clearFocus();
    }
    return super.dispatchKeyEventPreIme(event);
}
于 2016-10-05T16:18:12.457 に答える
0

EditTextandroid:layout_gravity="center"でこのタイプの問題を作成します。テキストを中央に配置したい場合は、この方法で行うことができます

ステップ1:レイアウトの場合

 <LinearLayout
                android:id="@+id/linerPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/imageView2"
                android:gravity="center">

                <EditText
                    android:id="@+id/editText2"
                    android:layout_width="wrap_content"
                    android:layout_height="40dp"
                    android:background="@null"
                    android:hint="*****"
                    android:layout_marginLeft="-40dp"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:inputType="textPassword"
                    android:textColor="@color/white"
                    android:textColorHint="@color/white"
                    android:textSize="18sp" />
            </LinearLayout>

ステップ2:プログラムで何か

 linerUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(mETUserName, 0);
            mETUserName.requestFocus();    
        }
    });

最後に非常にうまく機能します。softKeyboardを調整するためのこのソリューションを見つけました

于 2016-06-03T12:11:20.167 に答える
0

通常、最初に戻るボタンを押した後、調整パンは機能しません。次の方法で実行してみてください。-(EditText、AutoCompleteTextView、またはその他の誤動作するビューに実装できます)

 @Override
    public void onBackPressed() {
        editText.clearFocus();
        editText.setCursorVisible(false);
    }

それが誰かを助けることを願っています

于 2017-02-13T20:22:40.177 に答える
0

マニフェストファイルで多くの解決策を試した後、以下で解決しました。相対レイアウトのadjustPanが機能しません。

親レイアウトはLinearLayoutである必要があります

これが人々の時間を節約することを願っています。

于 2017-09-25T13:14:18.457 に答える