动态创建 Table 布局,根据屏幕尺寸自动适应单元格。
Dynamic creation of Table layout that auto fits cells according to screen size.
我正在尝试以 3x3 矩阵格式在我的屏幕上显示 9 个图像,以便它完全适合屏幕。
我能够使用 xml 获得所需的结果,但我无法通过代码创建控件来复制相同的结果。
(3 列完全适合我的屏幕,但行没有调整大小以适合屏幕)
请建议我可以通过代码创建动态控件并获得所需结果的方法。
注意:我希望所有内容都以矩阵格式适合我的屏幕,但没有滚动条。 (我无法使用网格布局实现此目的)
这是我的xml:
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<TableRow
android:gravity="center"
android:layout_weight="1">
<ImageView
android:layout_width="1dp"
android:layout_height="match_parent"
android:src="@drawable/icon"
android:layout_weight="1"
android:layout_gravity="center"/>
<ImageView
android:layout_width="1dp"
android:layout_height="match_parent"
android:src="@drawable/encrypt"
android:layout_weight="1"
android:layout_gravity="center"/>
<ImageView
android:layout_width="1dp"
android:layout_height="match_parent"
android:src="@drawable/gear"
android:layout_weight="1"
android:layout_gravity="center"/>
</TableRow>
<TableRow
android:gravity="center"
android:layout_weight="1">
.
.//Same as row 1
</TableRow>
<TableRow
android:gravity="center"
android:layout_weight="1">
.
.//Same a row 1
</TableRow>
</TableLayout>
这会产生矩阵格式的输出,调整单元格大小以适应屏幕。
但是当我通过代码创建控件时无法复制相同的结果。这是我正在使用的代码:
TableLayout simple_game = new TableLayout(this);
simple_game.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.MATCH_PARENT));
for(int i=0;i<3;i++)
{
TableRow tr = new TableRow(this);
simple_game.addView(tr);
TableLayout.LayoutParams trPara = new TableLayout.LayoutParams();
trPara.weight = 1f;
trPara.gravity = Gravity.CENTER;
tr.setLayoutParams(trPara);
for(int j=0;j<3;j++)
{
ImageView iv = new ImageView(this);
iv.setImageResource(I[i][j]);
tr.addView(iv);
TableRow.LayoutParams trPara2 = new TableRow.LayoutParams();
trPara2.width = 1;
trPara2.height = ViewGroup.LayoutParams.MATCH_PARENT;
trPara2.weight = 1f;
trPara2.gravity = Gravity.CENTER;
iv.setLayoutParams(trPara2);
}
}
setContentView(simple_game);
使用此代码,列会自行调整大小以适应屏幕,但行不会调整大小。
答案是LinearLayout和weight属性。
您可以:
- 动态添加 LinearLayout 'horizontal'。
- 向水平布局添加 3 个 LinearLayout 'vertical'。
- 为每个垂直布局添加 3 张图片。
- 将每个垂直布局的权重设置为 1。
- 将每张图片的权重设置为1。
注意:在 API 级别 21 或 22 之前,权重不适用于网格布局,因此如果这是您的目标网格布局可能是可行的方法。
我正在尝试以 3x3 矩阵格式在我的屏幕上显示 9 个图像,以便它完全适合屏幕。 我能够使用 xml 获得所需的结果,但我无法通过代码创建控件来复制相同的结果。 (3 列完全适合我的屏幕,但行没有调整大小以适合屏幕) 请建议我可以通过代码创建动态控件并获得所需结果的方法。
注意:我希望所有内容都以矩阵格式适合我的屏幕,但没有滚动条。 (我无法使用网格布局实现此目的)
这是我的xml:
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<TableRow
android:gravity="center"
android:layout_weight="1">
<ImageView
android:layout_width="1dp"
android:layout_height="match_parent"
android:src="@drawable/icon"
android:layout_weight="1"
android:layout_gravity="center"/>
<ImageView
android:layout_width="1dp"
android:layout_height="match_parent"
android:src="@drawable/encrypt"
android:layout_weight="1"
android:layout_gravity="center"/>
<ImageView
android:layout_width="1dp"
android:layout_height="match_parent"
android:src="@drawable/gear"
android:layout_weight="1"
android:layout_gravity="center"/>
</TableRow>
<TableRow
android:gravity="center"
android:layout_weight="1">
.
.//Same as row 1
</TableRow>
<TableRow
android:gravity="center"
android:layout_weight="1">
.
.//Same a row 1
</TableRow>
</TableLayout>
这会产生矩阵格式的输出,调整单元格大小以适应屏幕。
但是当我通过代码创建控件时无法复制相同的结果。这是我正在使用的代码:
TableLayout simple_game = new TableLayout(this);
simple_game.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.MATCH_PARENT));
for(int i=0;i<3;i++)
{
TableRow tr = new TableRow(this);
simple_game.addView(tr);
TableLayout.LayoutParams trPara = new TableLayout.LayoutParams();
trPara.weight = 1f;
trPara.gravity = Gravity.CENTER;
tr.setLayoutParams(trPara);
for(int j=0;j<3;j++)
{
ImageView iv = new ImageView(this);
iv.setImageResource(I[i][j]);
tr.addView(iv);
TableRow.LayoutParams trPara2 = new TableRow.LayoutParams();
trPara2.width = 1;
trPara2.height = ViewGroup.LayoutParams.MATCH_PARENT;
trPara2.weight = 1f;
trPara2.gravity = Gravity.CENTER;
iv.setLayoutParams(trPara2);
}
}
setContentView(simple_game);
使用此代码,列会自行调整大小以适应屏幕,但行不会调整大小。
答案是LinearLayout和weight属性。 您可以:
- 动态添加 LinearLayout 'horizontal'。
- 向水平布局添加 3 个 LinearLayout 'vertical'。
- 为每个垂直布局添加 3 张图片。
- 将每个垂直布局的权重设置为 1。
- 将每张图片的权重设置为1。
注意:在 API 级别 21 或 22 之前,权重不适用于网格布局,因此如果这是您的目标网格布局可能是可行的方法。