首页 > 解决方案 > 全屏缺口键盘调整大小问题

问题描述

我有一个在缺口(显示切口)模式下具有全屏布局的活动。我想要以下行为:

活动缺口模式调整调整大小

我尝试添加android:windowSoftInputMode="adjustResize"我的 android 清单,并从我的活动布局中的ScrollView开始。问题是:如果我添加android:fitsSystemWindows="true"到 ScrollView 我得到了正确的行为,但活动从全屏模式退出。

如何实现正确的节省全屏缺口模式?

我的安卓清单:

<activity
        android:name=".viewmodel.activities.account.PasswordRequestActivity"
        android:label="@string/app_label"
        android:screenOrientation="portrait"
        android:theme="@style/AppThemeFlatColor"
        android:windowSoftInputMode="adjustResize"/>

我的活动布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fillViewport="true">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="122dp"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:orientation="vertical"
        android:background="@color/solid_white">
        <Button
            android:id="@+id/requestpassword"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:textAllCaps="true"
            android:layout_alignParentBottom="true"
            android:background="@drawable/esg1a"
            android:onClick="doForgotPasswordRequest"
            android:text="@string/forgot_password_btn"
            android:textColor="@color/default_color"
            android:textAppearance="@style/TextAppearance.abc.Regular"
            android:textSize="13sp"
            android:contentDescription="@string/accessibility_requestpassword"/>

        <RelativeLayout
            android:id="@+id/layoutInsertMail"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_above="@id/requestpassword"
            android:background="@drawable/esg3a">

            <ImageView
                android:id="@+id/iconmail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginStart="16dp"
                android:src="@drawable/esb_icon_mail"/>
            <EditText
                android:id="@+id/requestEmail"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_toEndOf="@id/iconmail"
                android:layout_marginStart="20dp"
                android:ems="10"
                android:background="@null"
                android:hint="@string/login_email_hint"
                android:textSize="13sp"
                android:inputType="textEmailAddress"
                android:textAppearance="@style/TextAppearance.abc.Regular"
                android:contentDescription="@string/accessibility_emailrecoverpassword"/>

        </RelativeLayout>

    </LinearLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_above="@id/bottom"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:background="@android:color/transparent" />

    <View
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#BF000000"
        android:visibility="gone"
        android:layout_above="@id/bottom"/>




   </RelativeLayout>
   </ScrollView>

在 My v28 styles.xml 添加到 AppThemeFlatColor 主题:

    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>

解决了

找到解决方案

将以下代码添加到活动中:

@Override
protected void onResume() {
    super.onResume();

    ViewCompat.setOnApplyWindowInsetsListener(getWindow().getDecorView(), (view, insets) ->
            ViewCompat.onApplyWindowInsets(getWindow().getDecorView(),
                    insets.replaceSystemWindowInsets(insets.getSystemWindowInsetLeft(), 0,
                            insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom()))
    );
}

并添加到 ScrollView:

android:fitsSystemWindows="true"

标签: android

解决方案


推荐阅读