Android 当更改按钮中的文本时,按钮正在更改GridLayout中的位置

Android 当更改按钮中的文本时,按钮正在更改GridLayout中的位置,android,android-button,android-gridlayout,Android,Android Button,Android Gridlayout,我有一个充满按钮的网格布局,文本经常变化。而且总是在文本更改后,按钮有时会向上或向下移动一点,即使它们不应该这样做。我还看到一些与按钮中文本大小一致的地方(我在按钮中自动调整了文本大小)。我还发现,移动的范围随着按钮的高度而增加。 有一个运动的gif: 还有片段xml,其中有按钮: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/

我有一个充满按钮的网格布局,文本经常变化。而且总是在文本更改后,按钮有时会向上或向下移动一点,即使它们不应该这样做。我还看到一些与按钮中文本大小一致的地方(我在按钮中自动调整了文本大小)。我还发现,移动的范围随着按钮的高度而增加。 有一个运动的gif:

还有片段xml,其中有按钮:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".FragmentTypeA">

    <androidx.gridlayout.widget.GridLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        app:columnCount="3"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:rowCount="5"

        app:autoSizeTextType="uniform"
        app:autoSizeMinTextSize="9sp"
        app:autoSizeMaxTextSize="16sp"
        app:autoSizeStepGranularity="2sp">

        <Button
            android:id="@+id/button1"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="253dp"
            tools:layout_editor_absoluteY="317dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button2"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="253dp"
            tools:layout_editor_absoluteY="381dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button3"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="133dp"
            tools:layout_editor_absoluteY="258dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button4"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="253dp"
            tools:layout_editor_absoluteY="258dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button5"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="28dp"
            tools:layout_editor_absoluteY="258dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button6"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="28dp"
            tools:layout_editor_absoluteY="381dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button7"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="133dp"
            tools:layout_editor_absoluteY="317dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button8"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="133dp"
            tools:layout_editor_absoluteY="381dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>

        <Button
            android:id="@+id/button9"
            android:layout_width="90dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginBottom="15dp"
            android:background="@color/colorPrimaryLight"
            android:onClick="answerButtonClicked"
            android:text="@string/button"
            tools:layout_editor_absoluteX="28dp"
            tools:layout_editor_absoluteY="317dp"

            app:autoSizeTextType="uniform"
            app:autoSizeMinTextSize="9sp"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeStepGranularity="2sp"/>
    </androidx.gridlayout.widget.GridLayout>

</FrameLayout>


如果你需要更多的信息,只要写,我会添加它。非常感谢。

避免对布局中的
布局高度
布局宽度
中的尺寸进行硬编码,原因很明显,不同设备的尺寸会有所不同

要解决由于按钮文本长度不同而导致的“按钮对齐”问题,请使用嵌套的
LinearLayout
layout\u weight
属性的组合,如下所示:

  <androidx.gridlayout.widget.GridLayout
    app:columnCount="3"
    app:rowCount="5"
    app:autoSizeTextType="uniform"
    app:autoSizeMinTextSize="9sp"
    app:autoSizeMaxTextSize="16sp"
    app:autoSizeStepGranularity="2sp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">

      <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="45dp">

        <Button
          android:text="@string/button1"
          android:layout_height="match_parent"
          android:layout_weight="1"
          android:layout_width="0dp"/>

        <Button
          android:text="@string/button2"
          android:layout_height="match_parent"
          android:layout_weight="1"
          android:layout_width="0dp"/>

        <Button
          android:text="@string/button3"
          android:layout_height="match_parent"
          android:layout_weight="1"
          android:layout_width="0dp"/>

      </LinearLayout>

      <LinearLayout
        <!-- same as above, but for button 4,5,6 -->
      </LinearLayout>

      <LinearLayout
        <!-- same as above, but for button 7,8,9 -->
      </LinearLayout>

    </LinearLayout>

  </androidx.gridlayout.widget.GridLayout>


非常感谢你的回答,即使没有改变也不行。我需要将linearLayout的高度设置为一个具体的数字,然后将按钮的高度设置为与之匹配。
  <Button
    style="@style/MyButtonStyle"
    android:text="@string/button1"
    android:layout_height="@dimen/max_height_btn"
    android:layout_weight="1"
    android:layout_width="0dp"/>
  <style name="MyButtonStyle" parent="Widget.AppCompat.Button">
    <item name="autoSizeTextType">uniform</item>
    <item name="autoSizeMinTextSize">9sp</item>
    <item name="autoSizeMaxTextSize">16sp</item>
    <item name="autoSizeStepGranularity">2sp</item>
  </style>