1

我有一个 Horizo​​ntalFieldManager,里面有两个标签。左边的标签显示描述,右边的标签显示金额。

对我来说,显示第二个标签的全文更重要。问题是如果第一个标签太长,第二个标签会被包裹起来。我想避免这种情况,所以总是显示第二个标签的文本。在这种情况下,我还需要避免包裹在第一个标签上,因此该标签中的文本会被修剪并用点填充。

这是 Horizo​​ntalFieldManager 的外观: 在此处输入图像描述

这就是我需要得到的: 在此处输入图像描述

我该怎么做?

提前致谢!

4

2 回答 2

3

如果您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值。如果你愿意,你可以调整它。

结果

在此处输入图像描述

于 2013-12-18T23:54:20.417 回答
1

看那个例子:

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...
于 2013-12-18T21:20:01.723 回答