java - 使用 TableLayout 溢出布局
问题描述
我需要在一个表格中连续显示三件事。第一列应该有一个固定的宽度,比如屏幕的 15%。第三个应该右对齐并采用其首选宽度。第二个应该占用所有剩余空间(我需要添加一些间距,但这是另一回事)。
这发生在start
:
final Container list = new Container(BoxLayout.y());
list.setScrollableY(true);
final String[][] lines = {
{"19", "Some text", "123,00"},
{"20", "Some very very very very looong text", "1,00"},
};
for(final String[] line : lines) list.add(createContainer(line));
form.add(list);
容器相当简单:
private Container createContainer(String[] line) {
final TableLayout tableLayout = new TableLayout(1, 3);
tableLayout.setGrowHorizontally(true);
final Container result = new Container(tableLayout);
{
final Label l = new Label(line[0]);
l.getAllStyles().setFgColor(0x0000FF);
result.add(tableLayout.createConstraint().widthPercentage(15), l);
}
{
final Label l = new Label(emptyToSpace(line[1]));
l.getAllStyles().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
result.add(tableLayout.createConstraint().widthPercentage(-2), l);
}
{
final Label l = new Label(line[2]);
l.getAllStyles().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE));
l.getAllStyles().setFgColor(0x00FF00);
result.add(tableLayout.createConstraint().widthPercentage(-1).horizontalAlign(Component.RIGHT), l);
}
return result;
}
根据 javadoc,-1
表示首选大小并-2
表示“剩余空间”。它有点工作,但似乎有一个误判。
无论我选择什么设备,问题都会发生在模拟器中。我可能做错了,因为我是代号布局的新手。
解决方案
-2 标志主要针对最后一列进行了优化,因此这看起来像一个错误,但可能很难解决。我认为不需要在此处使用表格布局,因为您不使用可以提供行之间对齐的表格。
更简单的方法是边框布局,例如:
Container c = BorderLayout.centerEastWest(new Label(emptyToSpace(line[1])),
rightText, leftText);
如果您希望左列对齐,只需Component.setSameWidth()
在整个列上使用。
推荐阅读
- excel - 什么 vba 代码在 visio 中打开 .vsdx 文件(在 excel 中运行 vba)
- hive - 有人可以向我解释以下 Hive (0.13) 行为吗?
- android - 相机生成文件中的 java.lang.IllegalArgumentException
- pandas - 平均日期熊猫
- sql - 从出现在 Oracle Sql 中特定单词之前的句子中获取一组单词(字符和非字符用空格分隔)
- c - C语言整数存储的二叉树
- vue.js - 我的 Vue webapp 的 browserslistrc 应该是什么样子才能支持非常旧的 Safari 版本?
- powerbi - 为最后一个已知值关联多个表中的数据
- bash - 停止在逗号前插入换行符
- asp.net-core - PersistKeysToAzureBlobStorage 是否会影响性能?是否在启动时或每次调用时从那里获取一次密钥?