软键盘隐藏了EditText的一半

时间:2013-11-21 17:43:52

标签: android android-edittext android-softkeyboard

我有一个列表视图,最后一个列表项包含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。我也无法滚动listview。任何解决方案?

image

6 个答案:

答案 0 :(得分:29)

解决方法是在Manifest中将android:softInputMode属性设置为adjustResize,并将布局(不是列表项布局)放在ScrollView中。

答案 1 :(得分:8)

我有一个类似的问题,然后我使用android:windowSoftInputMode="adjustResize|stateHidden"提到here ..它对我很有用..

答案 2 :(得分:3)

从早期作为Android开发人员开始,我一直在努力使用虚拟键盘。我很惊讶Android仍然没有为此提供优雅而明确的解决方案。

所以这里的解决方法将把这个烂摊子放在身后。它可以在没有ScrollView变通方法的情况下工作,也可以放弃全屏标记。

  1. 将这个很棒的库添加到您的gradle文件中:
  2. compile'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1'

    1. 确保您的活动具有以下键盘设置:
    2. 机器人:windowSoftInputMode = “adjustResize”

      1. 使用垂直LinearLayout包装EditText,并添加一个可见性已过去的视图:

        <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下面的View高度,这样我们就可以在任何设备和自定义键盘上正确设置高度。然后只需在键盘打开时使其可见:
      3. 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 :(得分:2)

在窗口启动时禁用键盘

this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN );

答案 4 :(得分:1)

在Manifest中为您的Activity元素设置android:softInputMode属性。

有关有效值及其效果的完整列表,请参阅Manifest documentation。您特别感兴趣的可能是adjustPanadjustResize

答案 5 :(得分:0)

将其添加到清单中,如下所示:

<activity
    android:name="your_activity_name"
    android:windowSoftInputMode="adjustResize"
    android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" />

然后在布局中添加paddingBottom="20dp"和editText。