Учитывая два поля метки внутри HorizontalFieldManager, как мне сделать, чтобы отобразить полный текст из второй метки, не обертывая его?

У меня есть HorizontalFieldManager с двумя метками внутри. Левая метка показывает описание, а правая - денежную сумму.

Для меня важнее показать полный текст второй метки. Проблема в том, что если первая этикетка будет слишком длинной, вторая этикетка будет обернута. Я хочу избежать этого, поэтому всегда отображается текст из второй метки. В этом случае мне также нужно избегать обтекания первой меткой, поэтому текст с этой метки обрезается и заполняется точками.

Вот как выглядит HorizontalFieldManager: введите описание изображения здесь

И вот что мне нужно получить: введите здесь описание изображения

Как мне это сделать?

Заранее спасибо!


person Lucas    schedule 18.12.2013    source источник


Ответы (2)


Если вы создадите свой 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 для пространства вокруг всех полей. Вы можете изменить это, если хотите.

Результаты

введите описание изображения здесь

person Nate    schedule 18.12.2013

См. Этот пример:

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...
person Yehia Awad    schedule 18.12.2013