Координатор раскладки AdjustSize не сворачивая панель инструментов при открытии клавиатуры - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующий макет в моем приложении для Android, но у меня есть проблема с windowSoftInputMode="adjustResize" в действии. Макет содержит следующую кнопку в нижней части экрана. Когда клавиатура открыта, кнопка перекрывает поля ввода, а не сворачивает панель инструментов.

Current situation

Я пробовал

Примечания:

Самое смешное, что когда я что-то набираю в первом поле 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" />

Требуемый результат на небольших устройствах, когда недостаточно места для отображения полей ввода + кнопка под расширенной панелью инструментов:

desired result

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

В настоящее время у меня есть очень хакерское решение, которое далеко не оптимально. Я бы с удовольствием услышал, есть ли у кого-нибудь лучшее решение. Я понял, что панель инструментов не рухнет, поскольку сфокусированное представление уже видно. Так что теперь я программно переключаю фокус на последний элемент и возвращаюсь к первому элементу, чтобы свернуть панель инструментов.

    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>
0 голосов
/ 09 августа 2019

Вам необходимо установить значение CoordinatorLayout:

android:fitsSystemWindows="false"

Это значение по умолчанию true.В своем манифесте для Android вам нужно установить следующее для связанной с этим Задания:

windowSoftInputMode="adjustResize"

Я нашел решение вопроса в этой статье: https://code.luasoftware.com/tutorials/android/move-layout-when-keyboard-shown/

Я знаю, что это было давнотак как кто-то написал в этой теме, но так как я тоже пришел к этому, я хотел бы поделиться своими результатами.

0 голосов
/ 17 мая 2018

Используйте adjustpan. Это решит вашу проблему.

...