如何使按钮图像大小动态变化以适合XML中的网格布局容器? (Android)

时间:2018-07-04 06:48:07

标签: android xml layout dynamic size

我有一个gridView,其中包含许多图片和文字widgets。 XML看起来像这样(其余小部件看起来相同):

<GridLayout
    android:id="@+id/grid"
    android:layout_width="0dp"
    android:layout_height="218dp"
    android:alignmentMode="alignBounds"
    android:columnCount="3"
    android:rowCount="4"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="1.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/graphicContainer">

    <ImageButton
        android:id="@+id/cookieImageButton"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_column="0"
        android:layout_row="0"
        android:background="#0000"
        android:scaleType="fitCenter"
        app:srcCompat="@drawable/cookie_icon_60at3x"
        tools:layout_editor_absoluteX="33dp"
        tools:layout_editor_absoluteY="300dp"
        />
    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:layout_row="1"
        android:autoSizeMinTextSize="40px"
        android:autoSizeTextType="uniform"
        android:fontFamily="@font/youre_so_cool_regular"
        android:text="Cookies"
        android:textAlignment="center"
        tools:layout_editor_absoluteX="33dp"
        tools:layout_editor_absoluteY="369dp" />

给出类似this的结果

这很好,但是我希望widgets(图像按钮和文本视图)的大小可以动态更改以填充整个gridView。有没有办法用XML做到这一点?我一直在寻找答案,并找到了类似的替代方案:https://stackoverflow.com/questions/6444042/java-resize-image-dynamically-to-fit-grids-in-gridlayout

但是似乎不必要的复杂,并且可以并且应该使用一些XML代码来解决。还是我错了?

1 个答案:

答案 0 :(得分:1)

尝试此代码.. 将以下依赖项添加到应用程序级别的gradle文件中。

  implementation 'com.intuit.sdp:sdp-android:1.0.4'

然后在改变这些东西之后。

<GridLayout android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alignmentMode="alignBounds"
android:columnCount="3"
android:rowCount="4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/graphicContainer"
xmlns:android="http://schemas.android.com/apk/res/android">

<ImageButton
    android:id="@+id/cookieImageButton"
    android:layout_columnWeight="1"
    android:layout_gravity="fill_horizontal"
    android:layout_width="@dimen/_60sdp"
    android:layout_height="@dimen/_60sdp"
    android:layout_column="0"
    android:layout_row="0"
    android:background="#0000"
    android:scaleType="fitCenter"
    app:srcCompat="@drawable/cookie_icon_60at3x"
    tools:layout_editor_absoluteX="33dp"
    tools:layout_editor_absoluteY="300dp"
    />
<TextView
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_column="0"
    android:layout_columnWeight="1"
    android:layout_gravity="fill_horizontal"
    android:layout_row="1"
    android:autoSizeMinTextSize="40px"
    android:autoSizeTextType="uniform"
    android:fontFamily="@font/youre_so_cool_regular"
    android:text="Cookies"
    android:textAlignment="center"  
      tools:layout_editor_absoluteX="@dimen/_33sdp"
    tools:layout_editor_absoluteY="@dimen/_369sdp" />