windowSoftInputMode adjustmentResize 在目标 sdk 35 中不起作用

问题描述 投票:0回答:1

当我将应用程序的目标 SDK 从 34 增加到 35 时,

windowSoftInputMode
模式下的
adjustResize
不再起作用。我已经测试了一切,发现它只与目标SDK有关。例如,我在不同版本的 Android 的不同设备上测试了它,但它不起作用,我在不同布局的多个 Activity 中测试了它,我在不同的
windowSoftInputMode
模式下测试了它,我还测试了
fitsSystemWindows
。它在任何情况下都不起作用,我很确定它与目标 SDK 35 有关。但经过几个小时的尝试,我没有找到任何解决方案。

问题是这样的:我在清单中有一个值为

android:windowSoftInputMode="adjustResize"
的活动,在目标 SDK 35 中,当打开键盘时,布局不会放置在键盘顶部,并且键盘会覆盖屏幕,但是在目标SDK 34及以下版本中,不存在此问题。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true"
    android:focusable="true"
    android:fitsSystemWindows="true"
    android:focusableInTouchMode="true"
    tools:context=".view.RegisterNameActivity">

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/back"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_marginStart="@dimen/margin_10"
        android:layout_marginTop="@dimen/margin_10"
        android:background="?selectableItemBackgroundBorderless"
        android:clickable="true"
        android:focusable="true"
        android:padding="@dimen/padding_6"
        android:tint="?colorOnSurface"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_back_24" />

    <com.google.android.material.textview.MaterialTextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/iran_sans_demi_bold"
        android:text="@string/your_name"
        android:textColor="?colorOnSurface"
        android:textSize="@dimen/text_26"
        app:layout_constraintBottom_toTopOf="@+id/description"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.4"
        app:layout_constraintVertical_chainStyle="packed" />

    <com.google.android.material.textview.MaterialTextView
        android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/margin_32"
        android:layout_marginTop="@dimen/margin_4"
        android:layout_marginEnd="@dimen/margin_32"
        android:gravity="center"
        android:paddingStart="@dimen/padding_8"
        android:paddingEnd="@dimen/padding_8"
        android:text="@string/your_name_and_bio_description"
        android:textColor="?colorOnSurfaceVariant"
        android:textSize="@dimen/text_14"
        app:layout_constrainedWidth="true"
        app:layout_constraintBottom_toTopOf="@+id/name"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/title" />

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/margin_32"
        android:layout_marginTop="@dimen/margin_32"
        android:layout_marginEnd="@dimen/margin_32"
        android:backgroundTint="?colorOnSurface"
        android:gravity="start|center_vertical"
        android:hint="@string/name_required"
        android:imeOptions="flagNoExtractUi"
        android:paddingStart="@dimen/padding_8"
        android:paddingEnd="36dp"
        android:singleLine="true"
        android:textDirection="locale"
        app:layout_constraintBottom_toTopOf="@+id/bio"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/description"
        tools:ignore="RtlHardcoded" />

    <com.google.android.material.textview.MaterialTextView
        android:id="@+id/nameLength"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="-4dp"
        android:layout_marginEnd="@dimen/margin_4"
        android:textColor="?colorOnSurfaceVariant"
        android:textSize="@dimen/text_10"
        app:layout_constrainedWidth="true"
        app:layout_constraintEnd_toEndOf="@+id/name"
        app:layout_constraintTop_toBottomOf="@+id/name"
        tools:text="0/25" />

    <com.google.android.material.textview.MaterialTextView
        android:id="@+id/nameError"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/margin_8"
        android:layout_marginTop="-4dp"
        android:layout_marginEnd="@dimen/margin_8"
        android:textColor="?colorError"
        android:textSize="@dimen/text_10"
        android:visibility="gone"
        app:layout_constrainedWidth="true"
        app:layout_constraintEnd_toStartOf="@+id/nameLength"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintStart_toStartOf="@+id/name"
        app:layout_constraintTop_toBottomOf="@+id/name"
        tools:text="Please enter your name"
        tools:visibility="visible" />

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/clearName"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_marginEnd="-3dp"
        android:padding="10dp"
        android:tint="?colorOnSurfaceVariant"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="@+id/name"
        app:layout_constraintEnd_toEndOf="@+id/name"
        app:layout_constraintTop_toTopOf="@+id/name"
        app:srcCompat="@drawable/ic_close_16"
        tools:visibility="visible" />

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/bio"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin_16"
        android:backgroundTint="?colorOnSurface"
        android:gravity="start|center_vertical"
        android:hint="@string/biography_optional"
        android:imeOptions="flagNoExtractUi"
        android:inputType="textMultiLine"
        android:textDirection="locale"
        android:paddingStart="@dimen/padding_8"
        android:paddingEnd="36dp"
        app:layout_constraintBottom_toTopOf="@+id/termsAndConditions"
        app:layout_constraintEnd_toEndOf="@+id/name"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="@+id/name"
        app:layout_constraintTop_toBottomOf="@+id/name"
        tools:ignore="RtlHardcoded" />

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/clearBio"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_marginEnd="-3dp"
        android:padding="10dp"
        android:tint="?colorOnSurfaceVariant"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="@+id/bio"
        app:layout_constraintEnd_toEndOf="@+id/bio"
        app:layout_constraintTop_toTopOf="@+id/bio"
        app:srcCompat="@drawable/ic_close_16"
        tools:visibility="visible" />

    <com.google.android.material.textview.MaterialTextView
        android:id="@+id/bioLength"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="-4dp"
        android:layout_marginEnd="@dimen/margin_4"
        android:textColor="?colorOnSurfaceVariant"
        android:textSize="@dimen/text_10"
        app:layout_constrainedWidth="true"
        app:layout_constraintEnd_toEndOf="@+id/bio"
        app:layout_constraintTop_toBottomOf="@+id/bio"
        tools:text="0/256" />

    <com.google.android.material.textview.MaterialTextView
        android:id="@+id/termsAndConditions"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/margin_32"
        android:layout_marginEnd="@dimen/margin_32"
        android:layoutDirection="ltr"
        android:textColor="?colorOnSurfaceVariant"
        android:textSize="@dimen/text_12"
        app:layout_constrainedWidth="true"
        app:layout_constraintBottom_toBottomOf="@+id/submitFab"
        app:layout_constraintEnd_toStartOf="@+id/submitFab"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/submitFab"
        tools:text="By registering, you agree to the terms and conditions of using the App." />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/submitFab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/margin_24"
        android:clickable="true"
        android:focusable="true"
        android:layoutDirection="ltr"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:rippleColor="?colorOnPrimaryContainer"
        app:srcCompat="@drawable/ic_done_24"
        tools:ignore="ContentDescription,NotSibling" />

</androidx.constraintlayout.widget.ConstraintLayout>
android android-layout android-xml android-15
1个回答
0
投票

自 Android 15 (Android API 35) 起,应用程序现在默认为边缘到边缘。通过此更改,

adjustResize
本身还不够。

正如本文所描述的:

在面向 SDK 35 之前,您只需使用

android:windowSoftInputMode=”adjustResize”
即可在打开 IME 时保持对 RecyclerView 中的 EditText 的关注。通过“adjustResize”,框架将 IME 视为系统窗口,并填充窗口的根视图,以便内容避开系统窗口。

针对 SDK 35 后,您还必须使用

ViewCompat.setOnApplyWindowInsetsListener
WindowInsetsCompat.Type.ime()
考虑 IME,因为框架不会填充窗口的根视图。

因此,为了在显示键盘时保持对 EditText 的关注,您必须在插入填充中添加

ime()
类型。然后,当您在视图上设置插图时,您还必须按如下方式获取此类型:

ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
    val bars = insets.getInsets(
        WindowInsetsCompat.Type.systemBars()
                or WindowInsetsCompat.Type.displayCutout()
                or WindowInsetsCompat.Type.ime() // adding the ime's height
    )
    view.updatePadding(
        left = bars.left, 
        top = bars.top, 
        right = bars.right, 
        bottom = bars.bottom
    )
    WindowInsetsCompat.CONSUMED
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.