GridLayout doesn't reset after size adjustment

2019-08-23 07:45发布

问题:

My Android fragment is using the support GridLayout to display equally-spaced views (first image). In my manifest I'm changing how the soft keyboard displays so it resizes the GridLayout when I tap on the EditText and the keyboard is displayed (second image):

android:windowSoftInputMode="adjustResize|stateHidden"

When the soft keyboard is hidden, the GridLayout does not reset back to its initial size (last image).

Any idea on how to get the GridLayout to go back to its original configuration in the first screenshot? I know if I remove the android:windowSoftInputMode from the manifest the problem goes away, but that is not something I can change in another app from which this demo is created.

Here's the fragment's layout file:

<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:grid="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    grid:columnCount="2"
    grid:rowCount="3"
    grid:orientation="horizontal">

    <EditText
        android:layout_width="100sp"
        android:layout_height="80sp"
        grid:layout_gravity="center"
        grid:layout_columnWeight="1"
        grid:layout_rowWeight="1"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="80sp"
        grid:layout_gravity="center"
        grid:layout_columnWeight="1"
        grid:layout_rowWeight="1"
        android:text="B"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="80sp"
        grid:layout_gravity="center"
        grid:layout_columnWeight="1"
        grid:layout_rowWeight="1"
        android:text="C"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="80sp"
        grid:layout_gravity="center"
        grid:layout_columnWeight="1"
        grid:layout_rowWeight="1"
        android:text="D"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="80sp"
        grid:layout_gravity="center"
        grid:layout_columnWeight="1"
        grid:layout_rowWeight="1"
        android:text="E"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="80sp"
        grid:layout_gravity="center"
        grid:layout_columnWeight="1"
        grid:layout_rowWeight="1"
        android:text="F"/>

</android.support.v7.widget.GridLayout>

回答1:

I gave up on the GridLayout and switched to using a ConstraintLayout which works with no issues.

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <EditText
            android:id="@+id/itemA"
            android:layout_width="100sp"
            android:layout_height="80sp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="@+id/itemC"
            app:layout_constraintBottom_toTopOf="@+id/itemC"
            app:layout_constraintRight_toRightOf="@+id/itemC"/>

        <TextView
            android:id="@+id/itemB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="80sp"
            app:layout_constraintLeft_toLeftOf="@+id/itemD"
            app:layout_constraintBottom_toBottomOf="@+id/itemA"
            app:layout_constraintRight_toRightOf="@+id/itemD"
            app:layout_constraintVertical_chainStyle="spread"
            android:text="B"/>

        <TextView
            android:id="@+id/itemC"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="80sp"
            app:layout_constraintTop_toBottomOf="@+id/itemA"
            app:layout_constraintBottom_toTopOf="@+id/itemE"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@+id/itemD"
            app:layout_constraintHorizontal_chainStyle="spread"
            android:text="C"
            app:layout_constraintVertical_bias="0.0"/>

        <TextView
            android:id="@+id/itemD"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="80sp"
            app:layout_constraintLeft_toRightOf="@+id/itemC"
            app:layout_constraintBottom_toBottomOf="@+id/itemC"
            app:layout_constraintRight_toRightOf="parent"
            android:text="D"/>

        <TextView
            android:id="@+id/itemE"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="80sp"
            app:layout_constraintTop_toBottomOf="@+id/itemC"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintRight_toLeftOf="@+id/itemF"
            android:text="E"/>

        <TextView
            android:id="@+id/itemF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="80sp"
            app:layout_constraintTop_toBottomOf="@+id/itemD"
            app:layout_constraintLeft_toRightOf="@+id/itemE"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintRight_toLeftOf="parent"
            android:text="F"/>

    </android.support.constraint.ConstraintLayout>