我有一个 HorizontalFieldManager,里面有两个标签。左边的标签显示描述,右边的标签显示金额。
对我来说,显示第二个标签的全文更重要。问题是如果第一个标签太长,第二个标签会被包裹起来。我想避免这种情况,所以总是显示第二个标签的文本。在这种情况下,我还需要避免包裹在第一个标签上,因此该标签中的文本会被修剪并用点填充。
这是 HorizontalFieldManager 的外观:
这就是我需要得到的:
我该怎么做?
提前致谢!
我有一个 HorizontalFieldManager,里面有两个标签。左边的标签显示描述,右边的标签显示金额。
对我来说,显示第二个标签的全文更重要。问题是如果第一个标签太长,第二个标签会被包裹起来。我想避免这种情况,所以总是显示第二个标签的文本。在这种情况下,我还需要避免包裹在第一个标签上,因此该标签中的文本会被修剪并用点填充。
这是 HorizontalFieldManager 的外观:
这就是我需要得到的:
我该怎么做?
提前致谢!
如果您LabelField
使用LabelField.ELLIPSIS
标志创建您的,它将用.
字符截断该字段。我建议您使用自定义Manager
子类(而不是HorizontalFieldManager
)来决定您的两个的正确宽度LabelFields
应该是多少。在给定当前字体的情况下,您可以通过询问美元金额的正确宽度来做到这一点。
试试这个例子:
public class LabelAlignScreen extends MainScreen {
private LabelField description;
private LabelField balance;
private static final int MARGIN = 8; // used for x and y
public LabelAlignScreen() {
super(MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR);
Manager row = new RowManager(Manager.USE_ALL_WIDTH);
description = new LabelField("This is a very looooooooooong description",
LabelField.ELLIPSIS);
row.add(description);
balance = new LabelField("1,500,000,000 USD");
row.add(balance);
add(row);
}
private class RowManager extends Manager {
public RowManager(long flags) {
super(flags);
}
protected void sublayout(int width, int height) {
// first, determine how much space the balance field needs
int balanceWidth = balance.getFont().getAdvance(balance.getText());
// description field gets leftover width,
// minus a margin at left, center and right
int descriptionWidth = width - balanceWidth - 3 * MARGIN;
setPositionChild(description, MARGIN, MARGIN);
layoutChild(description, descriptionWidth, description.getPreferredHeight());
setPositionChild(balance, MARGIN + descriptionWidth + MARGIN, MARGIN);
layoutChild(balance, balanceWidth, balance.getPreferredHeight());
setExtent(width, getPreferredHeight());
}
public int getPreferredHeight() {
return Math.max(balance.getPreferredHeight(), description.getPreferredHeight()) + 2 * MARGIN;
}
public int getPreferredWidth() {
return Display.getWidth();
}
}
}
注意:您没有指定美元/余额字段是否应该是固定宽度,或者总是刚好适合文本。我认为它应该刚好适合文本,因为我认为这在大多数情况下会产生更好的布局。此外,我上面的代码对所有字段周围的空间使用硬编码MARGIN
值。如果你愿意,你可以调整它。
看那个例子:
class Test {
public String StringShorter(String field, int maxsize) {
//create a function that process the String you want to put in your field
StringBuilder strb=new StringBuilder();
// lets say you want your field to not more than 10 characters
if(field.length()>=maxsize) {
strb.append(field.substring(0,maxsize));
strb.append("...");
}
return strb.toString();
}
public static void main(String[] args) {
Test sl=new Test();
System.out.println(sl.StringShorter("sdadasfdfsdfsdfsdfdsffdfs", 10));
// define the maximum characters here it is defined to be maximum 10 characters
}
}
输出将是:
sdadasfdfs...