【问题标题】:Coordinatorlayout adjustResize not collapsing toolbar when opening keyboardCoordinatorlayoutadjustResize在打开键盘时不折叠工具栏
【发布时间】:2018-10-27 15:28:52
【问题描述】:

我的 android 应用程序中有以下布局,但我在活动中遇到了windowSoftInputMode="adjustResize" 的问题。布局在屏幕底部包含一个下一步按钮。打开键盘时,按钮与输入字段重叠,而不是折叠工具栏。

我试过了

备注:

有趣的是,当我在第一个 EditText 字段中输入内容时,当文本超出默认宽度时,它才会调整工具栏的大小并折叠它。

<RelativeLayout 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.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/save_button">

    <include layout="@layout/layout_toolbar" />

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:id="@+id/report_input_name_hint"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:fontFamily="@font/customfont"
            android:text="@string/report_phonenumber_name_hint"
            android:textColor="@color/light_grey"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <EditText
            android:id="@+id/report_input_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:background="@android:color/transparent"
            android:fontFamily="@font/customfont"
            android:hint="@string/report_phonenumber_name_hint"
            android:inputType="textPersonName"
            android:maxLength="120"
            android:textColorHint="@color/text_color_hint"
            android:textSize="@dimen/text_18sp"
            app:layout_constraintEnd_toStartOf="@+id/clear_text_button_name"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/report_input_name_hint" />

        <ImageView
            android:id="@+id/clear_text_button_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:contentDescription="@string/accessibility_image_description_clear_text_button"
            android:padding="@dimen/linespace_10dp"
            android:visibility="invisible"
            app:layout_constraintBottom_toBottomOf="@+id/report_input_name"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/report_input_name"
            app:srcCompat="@drawable/icn_pro_cross" />

        <View
            android:id="@+id/textview_underline_name"
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_marginEnd="8dp"
            android:layout_marginTop="8dp"
            android:background="@color/light_grey"
            app:layout_constraintEnd_toEndOf="@+id/clear_text_button_name"
            app:layout_constraintStart_toStartOf="@+id/report_input_name"
            app:layout_constraintTop_toBottomOf="@+id/report_input_name" />

        <android.support.constraint.Barrier
            android:id="@+id/barrier2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="bottom"
            app:constraint_referenced_ids="report_input_name,textview_underline_name,clear_text_button_name,report_input_name_hint"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textview_underline_name" />

        <TextView
            android:id="@+id/report_input_number_hint"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:fontFamily="@font/customfont"
            android:text="@string/telefoonnummer"
            android:textColor="@color/light_grey"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/barrier2" />

        <ImageView
            android:id="@+id/country_flag"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:adjustViewBounds="false"
            android:contentDescription="@string/accessibility_image_description_country_flag"
            android:padding="@dimen/linespace_10dp"
            android:src="@drawable/flag_netherlands"
            app:layout_constraintBottom_toBottomOf="@+id/report_input_number"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/report_input_number" />

        <ImageView
            android:id="@+id/dropdown_arrow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:rotation="90"
            android:src="@drawable/dropdown_arrow"
            app:layout_constraintBottom_toBottomOf="@+id/country_flag"
            app:layout_constraintStart_toEndOf="@+id/country_flag"
            app:layout_constraintTop_toTopOf="@+id/country_flag"
            tools:ignore="ContentDescription" />

        <TextView
            android:id="@+id/country_code"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:fontFamily="@font/customfont"
            android:text="@string/report_phone_dutch_country_code"
            android:textColor="@color/dark_text"
            android:textSize="@dimen/text_18sp"
            app:layout_constraintBottom_toBottomOf="@+id/report_input_number"
            app:layout_constraintStart_toEndOf="@+id/dropdown_arrow"
            app:layout_constraintTop_toTopOf="@+id/report_input_number" />

        <EditText
            android:id="@+id/report_input_number"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="@android:color/transparent"
            android:focusable="true"
            android:fontFamily="@font/customfont"
            android:hint="@string/report_phone_text_hint"
            android:inputType="number"
            android:maxLength="13"
            android:textColorHint="@color/text_color_hint"
            android:textSize="@dimen/text_18sp"
            app:layout_constraintEnd_toStartOf="@+id/clear_text_button"
            app:layout_constraintStart_toEndOf="@+id/country_code"
            app:layout_constraintTop_toBottomOf="@+id/report_input_number_hint" />

        <ImageView
            android:id="@+id/clear_text_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:contentDescription="@string/accessibility_image_description_clear_text_button"
            android:padding="@dimen/linespace_10dp"
            android:visibility="invisible"
            app:layout_constraintBottom_toBottomOf="@+id/report_input_number"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/report_input_number"
            app:srcCompat="@drawable/icn_pro_cross" />

        <View
            android:id="@+id/textview_underline_number"
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_marginEnd="8dp"
            android:layout_marginTop="8dp"
            android:background="@color/light_grey"
            app:layout_constraintEnd_toEndOf="@+id/clear_text_button"
            app:layout_constraintStart_toStartOf="@+id/country_flag"
            app:layout_constraintTop_toBottomOf="@+id/report_input_number" />


        <TextView
            android:id="@+id/error_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginTop="8dp"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:textColor="@color/emergency_button_color"
            app:layout_constraintEnd_toEndOf="@+id/textview_underline_number"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@+id/textview_underline_number"
            app:layout_constraintTop_toBottomOf="@+id/textview_underline_number" />

    </android.support.constraint.ConstraintLayout>

</android.support.design.widget.CoordinatorLayout>

<Button
    android:id="@+id/save_button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_margin="@dimen/activity_horizontal_margin"
    android:background="@drawable/report_next_button_background"
    android:enabled="false"
    android:text="@string/melden_input_volgende"
    android:textAllCaps="false"
    android:textColor="@color/inactive_text"
    android:textSize="@dimen/text_16sp"
    android:textStyle="bold" />

当扩展工具栏下没有足够空间显示输入字段 + 按钮时,在较小的设备上所需的结果:

【问题讨论】:

    标签: android xml android-layout kotlin android-coordinatorlayout


    【解决方案1】:

    使用adjustpan。它会解决你的问题。

    【讨论】:

    • 对不起,忘了说,我也试过了。但我想在键盘上方显示按钮,因为当工具栏折叠时还有空间
    • 我想你没有注意到作者的回复。谢谢!
    【解决方案2】:

    目前我有一个非常老套的解决方案,但远非最佳。如果有人有更好的解决方案,我很乐意听到。我发现工具栏不会折叠,因为聚焦的视图已经可见。所以现在我以编程方式将焦点切换到最后一项并返回到第一项以折叠工具栏。

        report_input_number.requestFocus()
    
        Handler().postDelayed( {
            report_input_name.requestFocus()
        }, 350)
    

    我正在使用以下布局:

    <LinearLayout 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:gravity="center|bottom"
    android:orientation="vertical">
    
    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    
        <include layout="@layout/layout_toolbar" />
    
        <android.support.v4.widget.NestedScrollView
            android:id="@+id/nested_scroll_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
            <android.support.constraint.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="16dp">
    
                <TextView
                    android:id="@+id/report_input_name_hint"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="16dp"
                    android:layout_marginStart="16dp"
                    android:text="@string/report_phonenumber_name_hint"
                    android:textColor="@color/light_grey"
                    android:visibility="invisible"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />
    
                <EditText
                    android:id="@+id/report_input_name"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="8dp"
                    android:background="@android:color/transparent"
                    android:hint="@string/report_phonenumber_name_hint"
                    android:inputType="textPersonName"
                    android:maxLength="120"
                    android:textColorHint="@color/text_color_hint"
                    android:textSize="@dimen/text_18sp"
                    app:layout_constraintEnd_toStartOf="@+id/clear_text_button_name"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/report_input_name_hint" />
    
                <ImageView
                    android:id="@+id/clear_text_button_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:contentDescription="@string/accessibility_image_description_clear_text_button"
                    android:padding="@dimen/linespace_10dp"
                    android:visibility="invisible"
                    app:layout_constraintBottom_toBottomOf="@+id/report_input_name"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toTopOf="@+id/report_input_name"
                    app:srcCompat="@drawable/icn_pro_cross" />
    
                <View
                    android:id="@+id/textview_underline_name"
                    android:layout_width="0dp"
                    android:layout_height="1dp"
                    android:layout_marginEnd="8dp"
                    android:layout_marginTop="8dp"
                    android:background="@color/light_grey"
                    app:layout_constraintEnd_toEndOf="@+id/clear_text_button_name"
                    app:layout_constraintStart_toStartOf="@+id/report_input_name"
                    app:layout_constraintTop_toBottomOf="@+id/report_input_name" />
    
                <TextView
                    android:id="@+id/report_input_number_hint"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="16dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="16dp"
                    android:text="@string/telefoonnummer"
                    android:textColor="@color/light_grey"
                    android:visibility="invisible"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/textview_underline_name" />
    
                <ImageView
                    android:id="@+id/country_flag"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="16dp"
                    android:adjustViewBounds="false"
                    android:contentDescription="@string/accessibility_image_description_country_flag"
                    android:padding="@dimen/linespace_10dp"
                    android:src="@drawable/flag_netherlands"
                    app:layout_constraintBottom_toBottomOf="@+id/report_input_number"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="@+id/report_input_number" />
    
                <ImageView
                    android:id="@+id/dropdown_arrow"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:rotation="90"
                    android:src="@drawable/dropdown_arrow"
                    app:layout_constraintBottom_toBottomOf="@+id/country_flag"
                    app:layout_constraintStart_toEndOf="@+id/country_flag"
                    app:layout_constraintTop_toTopOf="@+id/country_flag"
                    tools:ignore="ContentDescription" />
    
                <TextView
                    android:id="@+id/country_code"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="4dp"
                    android:text="@string/report_phone_dutch_country_code"
                    android:textColor="@color/dark_text"
                    android:textSize="@dimen/text_18sp"
                    app:layout_constraintBottom_toBottomOf="@+id/report_input_number"
                    app:layout_constraintStart_toEndOf="@+id/dropdown_arrow"
                    app:layout_constraintTop_toTopOf="@+id/report_input_number" />
    
                <EditText
                    android:id="@+id/report_input_number"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="8dp"
                    android:background="@android:color/transparent"
                    android:focusable="true"
                    android:hint="@string/report_phone_text_hint"
                    android:inputType="number"
                    android:maxLength="13"
                    android:textColorHint="@color/text_color_hint"
                    android:textSize="@dimen/text_18sp"
                    app:layout_constraintEnd_toStartOf="@+id/clear_text_button"
                    app:layout_constraintStart_toEndOf="@+id/country_code"
                    app:layout_constraintTop_toBottomOf="@+id/report_input_number_hint" />
    
                <ImageView
                    android:id="@+id/clear_text_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:contentDescription="@string/accessibility_image_description_clear_text_button"
                    android:padding="@dimen/linespace_10dp"
                    android:visibility="invisible"
                    app:layout_constraintBottom_toBottomOf="@+id/report_input_number"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toTopOf="@+id/report_input_number"
                    app:srcCompat="@drawable/icn_pro_cross" />
    
                <View
                    android:id="@+id/textview_underline_number"
                    android:layout_width="0dp"
                    android:layout_height="1dp"
                    android:layout_marginEnd="8dp"
                    android:layout_marginTop="8dp"
                    android:background="@color/light_grey"
                    app:layout_constraintEnd_toEndOf="@+id/clear_text_button"
                    app:layout_constraintStart_toStartOf="@+id/country_flag"
                    app:layout_constraintTop_toBottomOf="@+id/report_input_number" />
    
    
                <TextView
                    android:id="@+id/error_message"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:layout_marginTop="8dp"
                    android:paddingBottom="@dimen/activity_vertical_margin"
                    android:textColor="@color/emergency_button_color"
                    app:layout_constraintEnd_toEndOf="@+id/textview_underline_number"
                    app:layout_constraintHorizontal_bias="0.0"
                    app:layout_constraintStart_toStartOf="@+id/textview_underline_number"
                    app:layout_constraintTop_toBottomOf="@+id/textview_underline_number" />
    
            </android.support.constraint.ConstraintLayout>
    
        </android.support.v4.widget.NestedScrollView>
    
    </android.support.design.widget.CoordinatorLayout>
    
    <Button
        android:id="@+id/save_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/activity_horizontal_margin"
        android:layout_marginEnd="@dimen/activity_horizontal_margin"
        android:layout_marginStart="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/activity_horizontal_margin"
        android:layout_weight="0"
        android:background="@drawable/report_next_button_background"
        android:enabled="false"
        android:text="@string/melden_input_volgende"
        android:textAllCaps="false"
        android:textColor="@color/inactive_text"
        android:textSize="@dimen/text_16sp"
        android:textStyle="bold" />
    </LinearLayout>
    

    【讨论】:

    • 为什么要投反对票?如果提供更好的解决方案,我很乐意接受
    【解决方案3】:

    你需要在CoordinatorLayout上设置:

    android:fitsSystemWindows="false"
    

    此值默认为 true。在您的 Android Manifest 中,您需要为 Activity 相关设置以下内容:

    windowSoftInputMode="adjustResize"
    

    我在这篇文章中找到了问题的解决方案: https://code.luasoftware.com/tutorials/android/move-layout-when-keyboard-shown/

    我知道已经有一段时间没有人在这个帖子上写了,但是自从我也遇到了这个问题,我想分享我的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多