リストビューがあり、最後のリスト項目にEditTextが含まれています。
<RelativeLayout
Android:id="@+id/contentLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="30dp"
Android:orientation="vertical" >
<ImageView
Android:id="@+id/test"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignRight="@+id/messageEditText"
Android:layout_below="@+id/messageEditText"
Android:layout_marginRight="14dp"
Android:src="@drawable/test" />
<EditText
Android:id="@+id/messageEditText"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:layout_toLeftOf="@+id/sendImageButton"
Android:ems="10"
Android:gravity="top"
Android:hint="@string/messageEditText"
Android:inputType="textMultiLine"
Android:minHeight="55dp"
Android:paddingLeft="10dp"
Android:paddingRight="10dp"
Android:paddingTop="10dp" />
<ImageButton
Android:id="@+id/sendImageButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBottom="@id/messageEditText"
Android:layout_alignParentRight="true"
Android:layout_alignTop="@id/messageEditText"
Android:adjustViewBounds="true"
Android:maxHeight="55dp"
Android:maxWidth="55dp"
Android:padding="12dp"
Android:scaleType="centerInside"
Android:src="@drawable/sendmessage" />
</RelativeLayout>
EditTextの半分が非表示になります。リストビューをスクロールすることもできません。解決策はありますか?
解決策は、Android:softInputMode
属性をマニフェストのadjustResize
に設定し、ScrollView内にレイアウト(リストアイテムのレイアウトではない)を配置します。
同様の問題が発生したため、Android:windowSoftInputMode="adjustResize|stateHidden"
前述のように here ..それは私にとって非常にうまく機能します。
Android開発者としての初期の頃から、私は仮想キーボードと格闘しました。Androidはまだエレガントで明確な解決策を提供していないことに驚いています。
そこで、この混乱をあなたの背後に置く回避策を示します。 ScrollViewの回避策やフルスクリーンフラグを与えなくても機能します。
コンパイル 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1'
Android:windowSoftInputMode = "adjustResize"
editTextを垂直のLinearLayoutでラップし、Visibility with Goneのビューを追加します。
<com.ylimitapp.ylimitadmin.views.NormalFontEditText
Android:id="@+id/input_et"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="textCapSentences|textMultiLine"
Android:imeOptions="actionSend"
Android:paddingStart="20dp"
Android:paddingEnd="40dp"
Android:paddingTop="10dp"
Android:maxHeight="120dp"
Android:adjustViewBounds= "true"
Android:scrollHorizontally="false"
Android:textColorHint="#7b7b7b"
Android:hint="@string/type_your_message"
Android:background="@drawable/msg_inputfield_bg"
Android:textColor="@color/black_text_color"
Android:textSize="15.33sp"
/>
<View
Android:id="@+id/keyboard_view"
Android:layout_width="match_parent"
Android:layout_height="20dp"
Android:visibility="gone"
/>
</LinearLayout>
editTextをプッシュするビューの高さを計算できるように、画面サイズを計算します。
private void storeScreenHeightForKeyboardHeightCalculations() {
Rect r = new Rect();
View rootview = getActivity().getWindow().getDecorView();
rootview.getWindowVisibleDisplayFrame(r);
mOriginalScreenHeight = r.height();
Rect rectangle = new Rect();
Window window = getActivity().getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight = rectangle.top;
int contentViewTop =
window.findViewById(Window.ID_Android_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;
if (titleBarHeight == 0) {
mOriginalScreenHeight -= (24 * Utils.getDensity(getContext()));
}
}
private void addkeyBoardlistener() { KeyboardVisibilityEvent.setEventListener( getActivity(), new KeyboardVisibilityEventListener() { @Override public void onVisibilityChanged(boolean isOpen) { if (isOpen) { Rect r = new Rect(); View rootview = getActivity().getWindow().getDecorView(); // this = activity rootview.getWindowVisibleDisplayFrame(r); int keyboardHeight = (mOriginalScreenHeight - r.height()); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) keyboard_view.getLayoutParams(); params.height = (int) ((keyboardHeight + 5 * Utils.getDensity(getContext()))); keyboard_view.setLayoutParams(params); keyboard_view.setVisibility(View.VISIBLE); } else { keyboard_view.setVisibility(View.GONE); } } }); }
これが結果です:
this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN );
Android:softInputMode
マニフェストのアクティビティ要素の属性。
有効な値とその効果の完全なリストについては、 マニフェストのドキュメント を参照してください。特に興味があるのは、adjustPan
とadjustResize
でしょう。