从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。
答案 0 :(得分:0)
似乎在设计一行(使用代码)时,每个单元格都设置为自己的绝对最小宽度。
但是当您使用Eclipse GUI设计行时,每个单元格都设置为该列中最宽项目的大小。 (应该是这样,为了保持所有列正确对齐。)
不确定#1是否可以像#2一样工作。 #1&#34;尊重&#34;该列的宽度和尺寸本身也相应。