Android TableLayout和Button的调整大小

7

以下是我遇到的问题:我想在Android中创建一个类似于这个网格的布局:

enter image description here

为了做到这一点,我已经创建了这个布局:

     <?xml version="1.0" encoding="utf-8"?>
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/RelativeLayout1"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:gravity="center"
     android:orientation="vertical" >


    <TableLayout
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_weight="0.3">

        <Button
            android:id="@+id/clientimain"
            android:layout_width="0dip"
            android:layout_weight="1" android:layout_height="fill_parent"/>



        <Button
            android:id="@+id/button1"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="Button" />

     </TableRow>

     <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.3" >

        <Button
            android:id="@+id/button2"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="Button"/>

        <Button
            android:id="@+id/button6"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="Button" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.3" >

        <Button
            android:id="@+id/button3"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="Button"
             />

        <Button
            android:id="@+id/button7"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:text="Button"
             />

    </TableRow>

   </TableLayout>

   </RelativeLayout>

所以基本上它由6个按钮组成,采用表格布局,并正确设置了权重属性(或者我希望是这样!)。结果看起来很好,直到我尝试设置每个按钮的背景属性。在这种情况下,按钮会采取我放置的图像的高度(宽度没问题)。例如,如果我设置大小为96px x 96px的背景图像,则结果如下所示:enter image description here是否有一种方法可以防止此按钮“拉伸”,并正确居中图像?我尝试更改每个表格行的高度属性,更改按钮最大高度属性,以及更改带有图像按钮的按钮类型(并将src属性设置为所需的图标),但我没有实现所需的结果。我还阅读了谷歌关于支持多个屏幕和每个基本布局的文档,但没有找到任何解决方案。提前感谢任何愿意帮助我的人!Andrea

尝试在按钮上使用android:scaleType="fitXY"。还可以尝试使用http://developer.android.com/resources/tutorials/views/hello-gridview.html来完成此任务。 - Sergey Benner
我尝试了属性android:scaleType="fitXY",但它没有起作用。如果找不到解决方案,我将尝试切换到网格布局。谢谢。 - jiraya85
4个回答

7

将表格行的布局高度设置为0dip,并将权重(weight)设置为1

<TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1" >

这应该解决了你的问题。
更改:
<Button
            android:id="@+id/clientimain"
            android:layout_width="0dip"
            android:layout_weight="1" android:layout_height="fill_parent"/>

to

<Button
            android:id="@+id/clientimain"
            android:layout_width="0dip"
            android:layout_weight="1" android:layout_height="fill_parent"/>

这个方法可能有效,值得一试。在我的Eclipse中,它呈现出你最初的效果。也许你可以尝试清理项目(Project > clean project),因为它应该是正确的。


你的代码应该像这样:

<?xml version="1.0" encoding="utf-8"?>
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/RelativeLayout1"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:gravity="center"
     android:orientation="vertical" >


    <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/clientimain"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1" />

            <Button
                android:id="@+id/button1"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="Button" />
        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button2"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="Button" />

            <Button
                android:id="@+id/button6"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="Button" />
        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button3"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="Button" />

            <Button
                android:id="@+id/button7"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="Button" />
        </TableRow>
    </TableLayout>

   </RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/RelativeLayout1"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:gravity="center"
     android:orientation="vertical" >


    <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >


        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <ImageButton
                android:id="@+id/imageButton1"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_launcher" />

            <ImageButton
                android:id="@+id/imageButton2"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_launcher" />
        </TableRow>


        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <ImageButton
                android:id="@+id/imageButton3"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_launcher" />

            <ImageButton
                android:id="@+id/imageButton4"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_launcher" />
        </TableRow>


        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <ImageButton
                android:id="@+id/imageButton5"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_launcher" />

            <ImageButton
                android:id="@+id/imageButton6"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_launcher" />
        </TableRow>

    </TableLayout>

   </RelativeLayout>

还没有改变任何东西,那么这张图片的尺寸有多大?


我已经尝试过这样做,但没有任何结果。现在,表格的每一行都具有这些属性(高度为0,宽度为1),但是我仍然有拉伸的问题。谢谢。 - jiraya85
首先感谢您的支持。我已经尝试清理项目并用您的代码替换我的代码,但是当我选择背景图像时,仍然存在同样的问题。如果我不将任何图像应用于按钮的背景,则一切正常,网格看起来就像我想要的! - jiraya85
好的,我会尝试使用图片,稍等一下,我马上回来。 - FabianCook
我已经尝试使用256像素x 256像素的图像,以便具有非常高的dpi。 - jiraya85
我刚刚重新制作了你的图像,你需要做的是制作一个九宫格图案,这将有助于产生更好的效果,我很快会给你提供一个链接。 - FabianCook

2

我非常感激你的帮助,但我不想打扰你!你已经做得足够好了!我会尝试自己做九宫格图片。非常感谢你,SmartLemon! - jiraya85
2
如果您接受我的答案,我会非常感激。其实我并不介意,只要这对我来说是一次练习,测试自己的技能就好了。 - FabianCook
你的答案是什么,FabianCook?我也有同样的问题。 - user_vgizy
请参考上面的答案。 - FabianCook

1
我知道这不完全是你想要的,但我建议使用GridView而不是TableRow布局。
我认为GridView应该更好,因为它是使用视图回收和从AbsListView继承的其他东西实现的。 GridView部署起来更加困难,因为你必须使用Adapter,但如果你有很多重量级视图要加载,例如图片,它将有效地工作。 参考资料。
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView1"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:columnWidth="100dp"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</GridView>

0

当我将背景图像应用为

android:background="@drawable/ic_launcher"

它运行得很好。

我以为是因为图像的大小,所以我应用了另一个大小为160X160的图像,问题又出现了。 然后我将同样的160X160图像应用于所有按钮,它们对齐得很完美。 这是我的代码(图像Gender.png的尺寸为160X160像素)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/RelativeLayout1"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:gravity="center"
 android:orientation="vertical" >

<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent" 
    android:layout_weight="0.3">

    <Button
        android:id="@+id/clientimain"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="@drawable/Gender" />

    <Button
        android:id="@+id/button1"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Button" 
        android:background="@drawable/Gender"/>

 </TableRow>

 <TableRow
    android:id="@+id/tableRow2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.3" >

    <Button
        android:id="@+id/button2"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Button"
        android:background="@drawable/Gender"/>

    <Button
        android:id="@+id/button6"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Button" 
        android:background="@drawable/Gender"/>

</TableRow>

<TableRow
    android:id="@+id/tableRow3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.3" 
    >

    <Button
        android:id="@+id/button3"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Button"
        android:background="@drawable/Gender" />

    <Button
        android:id="@+id/button7"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Button"
         android:background="@drawable/Gender"/>

</TableRow>


    <TableRow
    android:id="@+id/tableRow4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.3" >

    <Button
        android:id="@+id/button77"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Button"
        android:background="@drawable/Gender"
         />

    <Button
        android:id="@+id/button75"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Button"
        android:background="@drawable/Gender"
         />

</TableRow>


</TableLayout>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接