ListViewの下部にテキストとEditTextが表示され、EditTextの右側に「送信」ボタンがある、かなり基本的なチャット画面を作成しようとしています。すべてが機能していますが、EditTextをクリックすると、仮想キーボードがそれを覆います。画面は少し移動しますが、キーボードの上に表示されるのに十分ではありません。マニフェストに「adjustPan」タグがあり、「adjustResize」タグも使用できませんでした。レイアウトの設定方法と関係があると思いますが、正直なところ何もわかりません。助けてください!
現在のレイアウト...
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ListView Android:id="@+id/Android:list"
Android:layout_height="0dip"
Android:layout_width="fill_parent"
Android:layout_weight="1"
Android:stackFromBottom="true">
</ListView>
<LinearLayout Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<EditText Android:id="@+id/sendMessageBox"
Android:focusable="true"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:scrollbars="vertical"
Android:maxLines="4"
Android:text=""
Android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
Android:maxLength="1000"
Android:hint="Type your message..."
Android:imeOptions="actionSend"/>
<Button Android:id="@+id/sendMessageButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom"
Android:text="Send"/>
</LinearLayout>
明らかに多くの検索を行った後、それは私がバグと呼んでいるものです。 (アクティビティからステータスバーを削除するために)フルスクリーンタグを使用する場合、ScrollViewでアクティビティをラップせずに "adjustResize"を使用することはできません。残念ながら、私はさらに別の問題を引き起こすListViewを使用しています。私はそれをいじるのはうんざりだし、おそらくその活動のフルスクリーンを放棄するでしょう。
マニフェストファイルで、適切なAndroid:windowSoftInputMode
プロパティ。この属性はAPI 3以降有効です。
<activity
...
Android:windowSoftInputMode="adjustPan" >
</activity>
オプションは次のとおりです。 http://developer.Android.com/guide/topics/manifest/activity-element.html#wsoft
マニフェストのアクティビティにAndroid:windowSoftInputMode="adjustResize"
を設定すると、ScrollView(または他の折りたたみ可能なViewGroups)が縮小して、ソフトキーボードに対応します。ただし、アクティビティのテーマでAndroid:windowFullscreen="true"
を設定した場合、ScrollViewは画面全体に表示されるため、縮小しません。ただし、テーマにAndroid:fitsSystemWindows="false"
を設定すると、adjustResizeが機能しなくなります
AndroidManifestでこれがありました。 adjustPan
が正しく動作しなくなる原因となりました。下のブロックを削除すると、すべて正常に動作します。
<supports-screens
Android:smallScreens="true"
Android:normalScreens="true"
Android:largeScreens="true"
Android:xlargeScreens="false"
Android:anyDensity="false" />
ここに私が見つけた1つの回避策があります。問題のあるeditTextを開き、RETURNキーを押します。 editTextが、撮影する位置により近く移動することに注意してください。
そのため、ハックしますが、基本的には編集テキストの先頭に改行を挿入してください。
これも下部の改行を使用して動作するようですが、ソフトキーボードが所定の位置にアニメーション化されるまで、遅延を使用して改行を追加する必要があります。
注:この問題は特定の携帯電話(DroidX)でのみ発生します。
if (Android.os.Build.MODEL.equals("DROIDX")) {
inputEt.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
String text = inputEt.getText().toString();
text = "\n\n" + text.trim();
inputEt.setText(text);
inputEt.setSelection(text.length());
}
});
}