0

我是使用 Java BlackBerry SDK 开发的新手。

我想创建一个ObjectChoiceField全屏宽度的自定义,并将标签放在它的左上角。

我怎样才能做到这一点?

4

1 回答 1

1

这是一种hack,但您可以通过以下方式完成此操作:

  1. 为 中的选项(字符串)添加空间ObjectChoiceField,以便将它们分隔为全屏宽度。

  2. 只需在自定义上方添加一个单独LabelField的管理器。 ObjectChoiceField

像这样:

   public class FullWidthChoiceField extends ObjectChoiceField {

      private Object[] _choices;  // cached for convenience
      private int _orientation;   // track device orientation

      public void setChoices(Object[] choices) {
         // TODO: this pixel value may need some tweaking!
         final int HBUFFER_PX = 62;
         int desiredWidth = Display.getWidth() - getPaddingLeft() - getPaddingRight()
               - getMarginLeft() - getMarginRight() - HBUFFER_PX;
         Font font = getFont();         
         int advanceOfOneSpace = font.getAdvance(' ');

         for (int c = 0; c < choices.length; c++) {  
            String trimmedChoice = ((String)choices[c]).trim();
            // how wide is the text for this choice?          
            int advance = font.getAdvance(trimmedChoice);
            int numSpacesToPad = Math.max(0, (desiredWidth - advance) / advanceOfOneSpace);
            char[] pad = new char[numSpacesToPad];
            Arrays.fill(pad, ' ');
            choices[c] = new String(pad) + trimmedChoice;  // pad to left of choice
         }

         _choices = choices;
         super.setChoices(choices);
      }

      // only needed if your app supports rotation!
      protected void layout(int width, int height) {
         super.layout(width, height);
         if (_orientation != Display.getOrientation()) {
            // orientation change -> we must readjust the choice field
            _orientation = Display.getOrientation();
            UiApplication.getUiApplication().invokeLater(new Runnable() {
               public void run() {
                  setChoices(_choices);               
               }
            });
         }
      }           
   }

并像这样使用它Screen

   public ObjectChoiceScreen() {
      super(MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR);

      Object[] choices = new Object[] { "one", "two", "three" };
      ObjectChoiceField ocf = new FullWidthChoiceField();
      ocf.setChoices(choices);

      VerticalFieldManager vfm = new VerticalFieldManager();
      vfm.add(new LabelField("Label", Field.USE_ALL_WIDTH));  //  | DrawStyle.HCENTER));
      vfm.add(ocf);
      add(vfm);
   }

导致

在此处输入图像描述

这要求您通过调用ocf.setChoices()而不是在构造函数中设置字段的选择。如果您愿意,您当然可以将其添加到自定义构造函数中。

于 2013-06-20T09:50:33.620 回答