web-dev-qa-db-ja.com

ソフトキーボードはEditTextの半分を非表示にします

リストビューがあり、最後のリスト項目に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の半分が非表示になります。リストビューをスクロールすることもできません。解決策はありますか?

image

23
Gintas_

解決策は、Android:softInputMode属性をマニフェストのadjustResizeに設定し、ScrollView内にレイアウト(リストアイテムのレイアウトではない)を配置します。

32
Gintas_

同様の問題が発生したため、Android:windowSoftInputMode="adjustResize|stateHidden"前述のように here ..それは私にとって非常にうまく機能します。

9
sham.y

Android開発者としての初期の頃から、私は仮想キーボードと格闘しました。Androidはまだエレガントで明確な解決策を提供していないことに驚いています。

そこで、この混乱をあなたの背後に置く回避策を示します。 ScrollViewの回避策やフルスクリーンフラグを与えなくても機能します。

  1. この素晴らしいライブラリをgradleファイルに追加してください:

コンパイル 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1'

  1. アクティビティに次のキーボード設定があることを確認してください。

Android:windowSoftInputMode = "adjustResize"

  1. 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>
    
  2. 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()));
                }
            }
    
    1. キーボードのオープンイベントとクローズイベントのリスナーを追加し、実行時にEditTextの下のビューの高さを設定して、デバイスとカスタムキーボードで適切に高さを設定します。次に、キーボードが開いているときに表示されるようにします。
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);
                                    }
                                }
                            });
                }

これが結果です:

Result:

3
Gal Rom

ウィンドウの起動時にキーボードを無効にする

this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN );
2
it's me

Android:softInputModeマニフェストのアクティビティ要素の属性。

有効な値とその効果の完全なリストについては、 マニフェストのドキュメント を参照してください。特に興味があるのは、adjustPanadjustResizeでしょう。

1
Bryan Herbst