私の問題:ソフトウェアキーボードが画面に表示された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編集ボックスを完全に覆います。
何が起こっているかについて何か考えはありますか? Android 4.2.2。
助けてください!ありがとう:-)
編集:最初のLinearLayoutをScrollView内に配置しようとしましたが、機能しません!
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はフォーカスを失いました。次に、もう一度タップして調整パンが機能します。
これは少しばかげているように見えるかもしれませんが、EditTextのプロパティGravityを「center_horizontal」または「center」に設定すると、この問題に遭遇しました。同じ問題がtextAlignment 'center'を使用するときに発生します。それを削除すれば、キーボードが出てきたときにキーボードがEditTextを2回目(およびそれ以降)隠すという問題に遭遇することはありません。
発生している問題は、ここで説明するように、プラットフォームの既知のバグです https://code.google.com/p/Android/issues/detail?id=182191
この修正はバックポートされないため、Android N。Android Nが最小の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はフォーカスを失います。その後、もう一度ボタンをタップすると、調整パンが意図したとおりに機能します。 (編集が拒否されたため、回答として投稿します。)
これが私が最初に使用したコードで、この問題に遭遇しました:
<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>
編集:この回避策は、ユーザーがedittextの最後のWordをクリックしている場合に機能しなくなります。現在、onKeyPreImeの回避策を使用しています
私にとって、onKeyPreIme
のオーバーライドは機能しません。したがって、代わりにdispatchKeyEventPreIme
をオーバーライドします。
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
clearFocus();
}
return super.dispatchKeyEventPreIme(event);
}
マニフェストファイルで多くの解決策を試した後、私はそれを以下で解決しました、相対レイアウトでのadjustPanは機能しません、
親レイアウトはLinearLayoutである必要があります
これが人々の時間を節約することを願っています。
通常、[戻る]ボタンを押して次のようにしようとすると、最初に調整パンが機能しません。
@Override
public void onBackPressed() {
editText.clearFocus();
editText.setCursorVisible(false);
}
それが誰かを助けることを願って
EditTextでAndroid: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を調整するためのこの解決策を見つけました