软键盘隐藏了一半的EditText

问题描述 投票:0回答:7
android android-listview android-edittext android-softkeyboard
7个回答
33
投票

解决方案是在 Manifest 中将

android:softInputMode
属性设置为
adjustResize
并将布局(不是列表项布局)放入 ScrollView 中。


9
投票

我遇到了类似的问题,然后我使用了

android:windowSoftInputMode="adjustResize|stateHidden"
,如上所述这里..它对我来说非常有效..


3
投票

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

所以这里有一个解决方法,可以让你摆脱这个混乱。它可以在没有 ScrollView 解决方法或放弃全屏标志的情况下工作。

  1. 将这个很棒的库添加到您的 gradle 文件中:

编译'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1'

  1. 确保您的活动具有以下键盘设置:

android:windowSoftInputMode =“调整调整大小”

  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 下面的视图高度,以便我们在任何设备和自定义键盘上正确设置高度。然后只需在键盘打开时使其可见即可:
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);
                                    }
                                }
                            });
                }

这是结果:


2
投票

在窗口启动时禁用键盘

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

1
投票

在清单中为 Activity 元素设置

android:softInputMode
属性。

请参阅 Manifest 文档,了解有效值及其效果的完整列表。您特别感兴趣的可能是

adjustPan
adjustResize


0
投票

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

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

然后在布局中添加

paddingBottom="20dp"
并编辑文本。


0
投票

Дуже важливо!!! В мене клавіатура зовсім не зміщувала жодного елементу вікна。 Коли з'являлась то приховувала все собою。 Я не міг знайти рішення цілий день。 getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); Це робить вікно без верхнього та нижнього барів,але це в той же час і не давало клавіатурі посунути вікно。 Гадаю це буде корисно тим хто шукав метод, щоб клавіатура не двигала елементи на екрані коли з'являється.

© www.soinside.com 2019 - 2024. All rights reserved.