Bri*_*ley 7 android tablelayout
我在我的应用程序中使用TableLayout.它包含四个TableRows,每个TableRows包含四个ImageView.我想要的行为是缩放布局以适应最短的尺寸.
它在纵向模式下工作正常但在横向模式下失败.
从文档看起来这是因为TableRow layout_height始终设置为WRAP_CONTENT.虽然我可以设置各个视图的尺寸,但如果我将View layout_height设置为FILL_PARENT,则TableLayout根本不会渲染.
我觉得我有一些简单的东西.有没有办法让TableLay与TableRows一起缩放以适应横向模式的高度?
XML布局:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:shrinkColumns="*">
</TableLayout>
Run Code Online (Sandbox Code Playgroud)
Java的:
public class Example extends Activity {
private TableLayout mTable;
private int[] mDrawableIds = { R.drawable.draw01, R.drawable.draw02, R.drawable.draw03, R.drawable.draw04, R.drawable.draw05, R.drawable.draw06, R.drawable.draw07, R.drawable.draw08, R.drawable.draw09, R.drawable.draw10, R.drawable.draw11, R.drawable.draw12, R.drawable.draw13, R.drawable.draw14, R.drawable.draw15, R.drawable.draw16 };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTable = (TableLayout)findViewById(R.id.table);
for (int j=0; j<4; j++) {
TableRow tr = new TableRow(this);
tr.setLayoutParams(new ViewGroup.LayoutParams( LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
for (int i=0; i<4; i++) {
ImageView iv = new ImageView(this);
iv.setImageResource(mDrawableIds[j*4+i]);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setAdjustViewBounds(true);
tr.addView(iv);
}
mTable.addView(tr);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我确实弄清楚了如何做到这一点。基本上,没有按照我想要的方式工作的部分是 TableRows。当我更改为横向时,前两个 TableRow 根本没有调整大小,而第三个则占用了剩余空间。第四行根本没有显示。
我发现我需要将 TableRows 的layout_weight 设置为相等的值。但是,没有方法可以在运行时执行此操作,因此我构建了以下布局文件,我将其称为 row.xml:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/trow"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1">
</TableRow>
Run Code Online (Sandbox Code Playgroud)
然后我使用 LayoutInflater 在运行时使用我想要的属性构建行:
mTable = (TableLayout)findViewById(R.id.table);
LayoutInflater inflater = getLayoutInflater();
for (int j=0; j<4; j++) {
View row = inflater.inflate(R.layout.row, mTable,false);
TableRow tr = (TableRow)row.findViewById(R.id.trow);
for (int i=0; i<4; i++) {
View image = inflater.inflate(R.layout.image, tr, false);
ImageButton ib = (ImageButton)image.findViewById(R.id.image);
ib.setAdjustViewBounds(true);
ib.setImageResource(mCardIds[j*4+i]);
tr.addView(ib);
}
mTable.addView(tr);
}
Run Code Online (Sandbox Code Playgroud)
现在,TableRows 在旋转时可以正确调整大小。我将 ImageViews 更改为 ImageButtons,因为我决定添加一些 onClick 行为,并且我通过单独的 xml 文件构建这些按钮,但我认为这些细节与调整大小问题无关。
| 归档时间: |
|
| 查看次数: |
17771 次 |
| 最近记录: |