2012-05-27 1 views
0

Я хочу, чтобы уменьшить высоту моего автозаполнения field.How идти о немResize автозаполнения поле ежевика

ЭРВО мой код

HorizontalFieldManager hfm = new HorizontalFieldManager(); 
LabelField lbl = new LabelField(" Name:     "); 

final AutoCompleteField TextField1 = new AutoCompleteField(filterLst) 
{ 
    public int getPreferredWidth() 
    { 
     return Display.getWidth()/2; 
    } 

    public void sublayout(int maxWidth, int maxheight) 
    { 
     super.sublayout(getPreferredWidth(), getPreferredHeight()); 
     setExtent(getPreferredWidth(), getPreferredHeight()); 
    } 
}; 
hfm.add(lbl); 
hfm.add(TextField1); 
add(hfm); 

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

Вот мой код EditField

//Add box next to field for containing input 
    HorizontalFieldManager hfm1 = new HorizontalFieldManager(); 
    LabelField lbl1 = new LabelField(" Amount:    "); 

    final EditField TextField2 = new EditField() 
    { 
     boolean _drawFocus = false; 
     protected void layout(int maxWidth, int maxHeight) 
     { 
     super.layout(Math.min(maxWidth, 300), Math.min(maxHeight, 30)); 
     } 
     protected boolean keyChar(char ch, int status, int time) 
     { 
     if (CharacterUtilities.isDigit(ch) || (ch == Characters.BACKSPACE)) 
     { 
      return super.keyChar(ch, status, time); 
     } 
     return true; 
     } 
     protected void drawFocus(Graphics graphics,boolean on) 
     { 
     _drawFocus = on; 
     super.drawFocus(graphics, on); 
     _drawFocus = false; 
     }  
     protected void paint(Graphics g) 
     {  
     if (_drawFocus) 
     { 
      super.paint(g); 
      return; 
     } 
     g.clear(); 
     g.drawRect(0,0, 50, 50); 
     int oldColor = g.getColor(); 
     g.setColor(Color.WHITE); 
     g.fillRect(0, 0, this.getPreferredWidth(), this.getPreferredHeight()); 
     g.setColor(oldColor); 
     g.drawRect(100, 100, 50, 50); 
     super.paint(g); 
     } 
    }; 
    TextField2.setBorder(BorderFactory.createRoundedBorder(new XYEdges(6,6,6,6))); 
    hfm1.add(lbl1); 
    hfm1.add(TextField2); 
    add(hfm1); 

enter image description here

Я хотел бы иметь размер autocompletefield используется для названия же как и другие fields.Please помощь.

Благодаря

ответ

1

Одна вещь, которая, вероятно, вызывает Вас проблемы в том, что EditField является то, что люди обычно думают о качестве Field. AutoCompleteField, однако, обрабатывается больше как Manager. Он хочет быть Manager, конечно, потому что он (вероятно) содержит EditField, но тогда также будет содержать еще одного дочернего Field, который будет показывать параметры автозаполнения динамически.

(Non-Manager) Field и Manager подклассы обрабатывать макет немного по-другому, так что я нашел, что пытается исправить это с нормальным getPreferredHeight() и layout() и sublayout() не работает, что хорошо для меня.

Итак, что я сделал, было в два раза:

  1. Во-первых, я пытался имитировать оформление по умолчанию AutoCompleteField с EditField подклассов. Это не идеально. Если вы хотите, чтобы они выглядели совершенно одинаково, вам может потребоваться написать настраиваемые методы paint() для обоих. Вы заявили, что проблема заключается в простом изменении размеров полей, поэтому я подумал, что это достаточно хорошо.
  2. Во-вторых, поскольку AutoCompleteField, по-видимому, содержит дочерний элемент EditField (по крайней мере, логически ... Я не уверен, что он реализован именно так), я решил попробовать, чтобы EditField выбрал свой собственный размер в некотором смысле которые соответствовали нормальным EditFields. Для этого я контролировал все высоты полей, просто устанавливая одинаковые Font на каждом.

Моих изменения в код:

final int fontSize = 24; // pick whatever you like here 
    final int pad = 2; 
    final int margin = 2; 

Я удалил код в layout() методы вашего поля редактирования, который был пытается контролировать высоту, так как ... как я уже сказал, я не имел успеха устанавливая высоту поля автозаполнения аналогичным образом. Я только что изменил ваши изменения этого месторождения layout() к очень стандартной реализации:

final EditField TextField2 = new EditField() 
    { 
    boolean _drawFocus = false; 
    protected void layout(int maxWidth, int maxHeight) 
    { 
     super.layout(getPreferredWidth(), getPreferredHeight()); 
    } 

Затем я установил отступы на вашем поле редактирования, потому что он смотрит на меня как AutoCompleteField использует подушечку 2 пикселя (на 5,0 Storm2) , Возможно, вам не все равно, для этого пользовательского интерфейса, но он также имеет запас в 2 пикселя.

TextField2.setPadding(pad, pad, pad, pad); 
    TextField2.setMargin(margin, margin, margin, margin); 

Затем я установил одинаковый шрифт для всех ваших полей. Он не должен быть шрифтом по умолчанию. Просто сделайте их одинаковыми. Этот шаг, по-видимому, диктует видимый размер округленного прямоугольника, нарисованного AutoCompleteField ... установкой шрифта.

Font font = Font.getDefault().derive(Font.PLAIN, fontSize); 
    TextField1.setFont(font); 
    TextField2.setFont(font); 

После этого поля редактирования и поля автозаполнения должны быть согласованной высоты. Я тестировал это на 5.0 9550. Поскольку значения pad и margin были определены экспериментально, я могу полностью поверить, что эти значения (например, 2 пикселя) могут меняться на разных устройствах. Возможно, вам придется немного поэкспериментировать.

+0

Я также отмечу, что если вам не нравится вышеупомянутый ответ, есть другое решение [на форумах Blackberry] (http://supportforums.blackberry.com/t5/Java-Development/How-to-reduce -size-оф-autoCompletefields/TD-п/1190063). Я играл с этим, но не совсем понял, как правильно работать. – Nate

+0

Большое спасибо Nate.Truly ценю вашу помощь. Я попытался внедрить в editfield (используя модель 9900), это дало мне небольшие отличия. Поэтому я решил увеличить границу поля редактирования до 10 во всех измерениях. Он несколько напоминает autofield сейчас . Но еще раз спасибо. – techie

 Смежные вопросы

  • Нет связанных вопросов^_^