我想要一个5次5按钮的布局。它们中的每一个都应具有相同的宽度和高度(它们应该是正方形)。我希望整个矩阵使用屏幕宽度(或高度,取决于旋转)。
我目前在Java代码中“手动”执行此操作:
for (int y=0; y<5; y++) {
TableRow tr = new TableRow(this);
for (int x=0; x<5; x++) {
Button b = new Button (this);
...
tr.addView(b, 60, 60);
}
layout.addView(tr);
}
这可以通过首先获得屏幕宽度然后除以5来改进,以除去这个文字60.但我想知道如何在res / layout XML文件中执行此操作?
如何指定高度与宽度相同? (我可以将宽度设置为match_parent。)
答案 0 :(得分:2)
最好将此作为自定义布局管理器。来自ViewGroup的子类并实现所需的布局代码。如果您尝试使用通用布局算法(不是这样),则实现自定义布局管理器非常简单。
例如,请参见平台的AbsoluteLayout作为简单布局管理器的示例:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/AbsoluteLayout.java
答案 1 :(得分:0)
我有两个想法。
两者都非常类似于 hackbod
的建议您可以创建类似SquareButton的扩展Button或SquareTableLayout来扩展TableLayout,而不是从ViewGroup实现子类。
覆盖构造函数类,以便将宽度或高度值替换为它们的最小值。我不确定,但我想,你将能够在XML-Description中使用新的布局。
可能只创建一个SquareTableLayout
更容易然后将TableLayout中所有元素的宽度和高度设置为0dip,将所有元素的权重设置为1.
假设你的表中有NxN个元素,那么由于相同的重量,它们都会得到相同的宽度和相同的高度。
答案 2 :(得分:0)
使用表格...这样所有按钮的宽度都相同。你可以相应地改变高度
答案 3 :(得分:-1)
您需要查看TableLayout.