我想要膨胀TableLayout
的单个单元格:
像这样:
___ ___
| 1 | 2 |
|---+---|
| 3 | 4 |
|---+---|
| 5 ...
... and so on
我知道如何对TableLayout
的行进行充气,但不知道如何对单个单元格进行充气。它甚至可能吗?解决方法是使用彼此相邻的两个单独的LinearLayouts
。
此外:
我可以动态更改柱数吗?我的应用程序应仅在两个设备上运行:10.1英寸Galaxy Tab及其模拟器(屏幕较小)。所以在真实设备上我可能应该使用三列。我希望桌子能够填满整个屏幕宽度,而不是粘在左侧。但我不知道如何使用LinearLayout
解决方法。
答案 0 :(得分:0)
希望这就是你所要求的:
我想在Android中扩充TableLayout的单个单元格。
假设您的此布局文件包含TableLayout
:
<TableLayout
android:id="@+id/tbl"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableRow>
</TableLayout>
现在假设您要添加2个单元格,第一行(第二个位置)中的一个单元格和第一个位置(对角线)上的第二行中的一个单元格。这就是你要做的事情:
TableLayout tl = (TableLayout) findViewById(R.id.tbl);
TableRow tr1 = (TableRow) findViewById(R.id.tableRow1);
TableRow tr2 = (TableRow) findViewById(R.id.tableRow2);
View cell1 = new View(this); // here you could inflate a layout instead
// of this simple View item
TableRow.LayoutParams trlp1 = new TableRow.LayoutParams(200, 200);
trlp1.column = 1; // the column count is 0 based
cell1.setLayoutParams(trlp1);
cell1.setBackgroundColor(Color.RED);
tr1.addView(cell1);
View cell2 = new View(this);
TableRow.LayoutParams trlp2 = new TableRow.LayoutParams(200, 200);
trlp2.column = 0;
cell2.setLayoutParams(trlp2);
cell2.setBackgroundColor(Color.GREEN);
tr2.addView(cell2);
我可以动态更改列数吗?
TableLayout
中的列数来自具有最大单元格数的行(如果一行有2个单元格而另一行有12个单元格,那么TableLayout
包含这两行会有12列)。要增加或减少列数,您只需添加或删除具有最大单元格数的行/行中的单元格。
我希望桌子能够填满整个屏幕宽度,而不是粘在上面 左侧
我不明白你想要什么(我希望你的TableLayout
设置为FILL_PARENT
)。有android:stretchColumns="*"
(以及您可以在代码中调用的方法),可使您的列在TableLayout
中占用任何额外的可用空间。
答案 1 :(得分:0)
如果其他人有类似的问题,并希望动态地将未知数量的视图加载到现有布局中:
只需使用RelativeLayout
,将第一个View
添加到您想要的位置,并将其余内容与之前添加的内容对齐。 Android将不为每个不适合同一行的视图自动换行,因此您必须先计算或通过“尝试错误”进行计算。
这是一个粗略的例子。首先是填充接口的方法的代码片段:
ArrayList<Item> listItems = item.getItems();
if( listItems != null ) {
for( Item item: listItem ) {
addItem( MyActivity.this, item, iCounterItemNumber );
iCounterItemNumber++;
}
}
这里是addItem方法:
private void addItem( Activity context, final Item item, int iCounterItemNumber ) {
View vItem = LayoutInflater.from(context).inflate(R.layout.layoutinflatable_item, null);
TextView txtvItemName = (TextView) vItem.findViewById(R.id.textView_itemName);
txtvItemName.setText(item.getName());
vItem.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View vItem) {
// just to show that you can set a OnClickListener
}
});
if ( iCounterItemNumber == 0 ) {
RelativeLayout.LayoutParams rlpItemParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_TOP);
rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
vItem.setId( 100 );
_rlItemTable.addView( vItem, rlpItemParemeters );
} else if ( iCounterItemNumber % 2 == 0 ) {
RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rlpPackageParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
rlpPackageParemeters.addRule(RelativeLayout.BELOW, ( 100 - 2 + iCounterItemNumber ) );
vPackage.setId( 100 + iCounterItemNumber );
_rlShopPackagesTable.addView( vPackage, rlpPackageParemeters );
} else {
RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rlpPackageParemeters.addRule(RelativeLayout.ALIGN_BOTTOM, ( 100 - 1 + iCounterItemNumber ) );
rlpPackageParemeters.addRule(RelativeLayout.RIGHT_OF, ( 100 - 1 + iCounterItemNumber ) );
vPackage.setId( 100 + iCounterItemNumber );
_rlItemTable.addView( vPackage, rlpPackageParemeters );
}
我知道你可以缩短它,但它应该只是一个粗略的例子。希望很清楚我在这里做了什么。不包括不同的屏幕尺寸。使用不同大小的视图,添加或获取屏幕大小,然后使用不同的方法。