Android 调整 GridLayout 中的 ImageButton

Android Adjusting ImageButtons in a GridLayout

我有一个 GridLayout 有七个 ImageButton。我想让它们在两个高度相等的行和四个相等的宽度列中,第一行有 4 个按钮,第二行有 3 个按钮。这是我的问题......我想让最后一个按钮跨越两列。我使用了一些尺寸比原始按钮尺寸更大的测试图像。此外,我制作了一个 XML 文件,如下所示,以供按钮样式参考。

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="ButtonStyle">
    <item name="android:textColor">#00FF00</item>
    <item name="android:typeface">monospace</item>
    <item name="android:adjustViewBounds">true</item>
    <item name="android:background">@android:color/background_light</item>
    <item name="android:layout_marginLeft">5dip</item>
    <item name="android:layout_marginRight">5dip</item>
    <item name="android:layout_marginTop">5dip</item>
    <item name="android:layout_marginBottom">5dip</item>
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_gravity">fill</item>
    <item name="android:layout_columnWeight">20</item>
    <item name="android:scaleType">fitXY</item>
  </style>
</resources>

我可以使用 ImageButton7 的默认值 layout_columnSpan 来排列它们,即 1。但是,当我将那个 ImageButton 的 layout_columnSpan 设置为 2 时,第二行的高度会延伸,给出第二种观点。

View when ImageButton7, layout_columnSpan=1

View when ImageButton7, layout_columnSpan=2

这是我的 XAML 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <GridLayout
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/gridLayout1"
        android:columnCount="4">
        <ImageButton
            android:src="@drawable/btn0"
            android:id="@+id/imageButton1"
            style="@style/ButtonStyle" />
        <ImageButton
            android:src="@drawable/btn1"
            android:id="@+id/imageButton2"
            style="@style/ButtonStyle" />
        <ImageButton
            android:src="@drawable/btn2"
            android:id="@+id/imageButton3"
            style="@style/ButtonStyle" />
        <ImageButton
            android:src="@drawable/btn3"
            android:id="@+id/imageButton4"
            style="@style/ButtonStyle" />
        <ImageButton
            android:src="@drawable/btn4"
            android:id="@+id/imageButton5"
            style="@style/ButtonStyle" />
        <ImageButton
            android:src="@drawable/btn5"
            android:id="@+id/imageButton6"
            style="@style/ButtonStyle" />
        <ImageButton
            android:src="@drawable/btn6"
            android:id="@+id/imageButton7"
            style="@style/ButtonStyle"
            android:layout_columnSpan="2" />
    </GridLayout>
</LinearLayout>

目标是获得如下图所示的视图。任何帮助,将不胜感激。

为什么要为此使用 GridLayout? 我会使用带权重的 LinearLayout(伪 xml):

<Vertical LinearLayout>

<Horizontal LinearLayout with weightsum=4>
<element with weight 1/>
<element with weight 1/>
<element with weight 1/>
<element with weight 1/>
</Horizontal LinearLayout with weightsum=4>

<Horizontal LinearLayout with weightsum=4>
<element with weight 1/>
<element with weight 1/>
<element with weight 2/>
</Horizontal LinearLayout with weightsum=4>

</Vertical LinearLayout

图像按钮会尝试保持图像的宽高比,因此当您跨度 Button7 时,它的宽度会扩展,因此它的高度会扩展以保持宽高比。

然后当高度变大时,所有行的高度都会变大,这就会发生 ;)

要解决您的问题,只需使您的 button7 图像的宽高比适合两列(例如现在的 2 倍宽度),您的问题就会得到解决;)

解决您的问题的另一种方法是创建 9patch 图像。看这个 link:

https://developer.android.com/studio/write/draw9patch.html

9pAtch 图像是可扩展的,很棒的东西。