Android在GridLayout中调整ImageButtons

时间:2016-10-11 20:16:22

标签: android xamarin.android android-gridlayout android-imagebutton

我有一个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时,第二行在高度上延伸,给出第二种观点。

查看ImageButton7,layout_columnSpan = 1 enter image description here

查看ImageButton7,layout_columnSpan = 2 enter image description here

这是我的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>

目标是拥有如下图所示的视图。任何帮助,将不胜感激。 enter image description here

2 个答案:

答案 0 :(得分:1)

图像按钮尝试保持图像的纵横比,因此当yoy跨度Button7时,其宽度将延伸,因此其高度会延伸到保持纵横比。

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

要解决您的问题,只需按钮7图像的宽高比适合两列(如现在的2倍宽度),您的问题就会解决;)

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

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

9pAtch图像是可扩展的和伟大的事物。

答案 1 :(得分:0)

为什么要使用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