以编程方式填充时的TableLayout差异

时间:2010-10-12 01:21:33

标签: android

从xml到编程创建TableLayout时,我得到了不同的结果。在纯xml中,TableRow的所有三个子节点(我的测试代码中都是ImageView子类)在宽度上展开,因此它们水平填充表格,每个节点占宽度的三分之一。但是,当以编程方式完成时,它们始终是保存其内容的最小尺寸。我想让它们扩展,但我不想硬编码xml。

虽然我也试过TableRow的子代的“纯粹”程序化构建,但下面我展示了我的首选方式,在循环中,我将每个子项从包含该组件的xml文件中充气,并且然后将它们添加到TableRow。 (请注意,我以编程方式创建TableRow)

这是main.xml。请注意,TableRow和子项在这里被注释掉,因为这是程序化版本。 (取消注释纯xml)

<view class="com.whatev.ButtonMenu"
    android:background="@drawable/test1" 
    android:layout_height="50px" android:layout_width="fill_parent" android:padding="0px"
    android:layout_alignBottom="@+id/map" android:id="@+id/buttonMenu" >
<!-- TableRow>

    <view xmlns:android="http://schemas.android.com/apk/res/android" class="com.whatev.MenuButton" 
    android:background="@drawable/test2" android:src="@drawable/bg" 
    android:scaleType="center" android:cropToPadding="false" android:padding="3px"  android:layout_weight="20"
    android:layout_height="fill_parent" android:layout_width="wrap_content" />
    <view xmlns:android="http://schemas.android.com/apk/res/android" class="com.whatev.MenuButton" 
    android:background="@drawable/test2" android:src="@drawable/bg" 
    android:scaleType="center" android:cropToPadding="false" android:padding="3px"  android:layout_weight="20"
    android:layout_height="fill_parent" android:layout_width="wrap_content" />
    <view xmlns:android="http://schemas.android.com/apk/res/android" class="com.whatev.MenuButton" 
    android:background="@drawable/test2" android:src="@drawable/bg" 
    android:scaleType="center" android:cropToPadding="false" android:padding="3px"  android:layout_weight="20"
    android:layout_height="fill_parent" android:layout_width="wrap_content" />
    </TableRow -->
    </view>

然后在filterbutton.xml中,我有这个(与上面评论中重复的内容相同):

<?xml version="1.0" encoding="utf-8"?>
<view xmlns:android="http://schemas.android.com/apk/res/android" class="com.whatev.MenuButton" 
    android:background="@drawable/test2" android:src="@drawable/bg" 
    android:scaleType="center" android:cropToPadding="false" android:padding="3px"  android:layout_weight="20"
    android:layout_height="fill_parent" android:layout_width="wrap_content"  />
    />

最后,这是ButtonMenu的构造函数的java代码,它是TableLayout的子类。 (除了调用super()之外的所有内容都要注释掉纯XML。)

public ButtonMenu(Context context, AttributeSet attrs) {
        super(context, attrs);

        TableRow firstTableRow = new TableRow(context);

        for (int i=0; i<3; i++) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            MenuButton mb = (MenuButton)inflater.inflate(R.layout.filterbutton, null);
            firstTableRow.addView(mb);
        } 
        this.addView(firstTableRow);
    }

为什么它表现不同的任何想法,或者为了让孩子们(“MenuButtons”)扩展到每个是TableLayout(“ButtonMenu”)宽度的三分之一,我必须做些什么?请注意,在“真实”情况下,将有可变数量的按钮,而不是总是3。

1 个答案:

答案 0 :(得分:0)

  1. 似乎在设计一行(使用代码)时,每个单元格都设置为自己的绝对最小宽度。

  2. 但是当您使用Eclipse GUI设计行时,每个单元格都设置为该列中最宽项目的大小。 (应该是这样,为了保持所有列正确对齐。)

  3. 不确定#1是否可以像#2一样工作。 #1&#34;尊重&#34;该列的宽度和尺寸本身也相应。