2013-09-19 1 views
1

Контекст: J2ME, LWUIT, Nokia S40Удалить запас ContainerList или набивка между элементами

Я боролся с этим в течение последних нескольких дней. При использовании контейнера ContainerList, независимо от того, насколько я изменяю ContainerList или заполнение, маржу и границу элементов, всегда есть маркер 2px вокруг каждого элемента. я соединял этот пример мидлет, чтобы показать, что я имею в виду:

import javax.microedition.midlet.MIDlet; 
import javax.microedition.midlet.MIDletStateChangeException; 

import com.sun.lwuit.Command; 
import com.sun.lwuit.Component; 
import com.sun.lwuit.Display; 
import com.sun.lwuit.Form; 
import com.sun.lwuit.Label; 
import com.sun.lwuit.events.ActionEvent; 
import com.sun.lwuit.layouts.BoxLayout; 
import com.sun.lwuit.list.CellRenderer; 
import com.sun.lwuit.list.ContainerList; 
import com.sun.lwuit.list.DefaultListModel; 

public class Test extends MIDlet { 

public Test() { 

} 

protected void startApp() throws MIDletStateChangeException { 
    Display.init(this); 

    Form form = new Form("ContainerList margin test"); 

    DefaultListModel model = new DefaultListModel(); 
    for(int i=0; i<100; i++){ 
     model.addItem(new String("Element " + i)); 
    } 

    ContainerList list = new ContainerList(new BoxLayout(BoxLayout.Y_AXIS), model); 
    list.getStyle().setBgColor(0x00FF00); 
    list.getStyle().setBgTransparency(255); 
    list.getStyle().setPadding(0,0,0,0); 
    list.getStyle().setMargin(0,0,0,0); 
    list.getStyle().setBorder(null); 

    list.setRenderer(new CellRenderer(){ 

     public Component getCellRendererComponent(Component plist, 
       Object pmodel, Object pvalue, int index, boolean selected) { 

      Label l = new Label((String) pvalue); 
      l.getStyle().setBgColor(0xff0000); 
      l.getStyle().setBgTransparency(255); 
      l.getStyle().setPadding(0,0,0,0); 
      l.getStyle().setMargin(0,0,0,0); 
      l.getStyle().setBorder(null); 
      l.getPressedStyle().setBgColor(0x000000); 
      l.getPressedStyle().setBgTransparency(255); 
      l.getSelectedStyle().setBgColor(0xFFFFFF); 
      l.getSelectedStyle().setBgTransparency(255); 

      return l; 
     } 

     public Component getFocusComponent(Component arg0) { 
      Label l2 = new Label(); 
      l2.getStyle().setBgColor(0xFF00FF); 
      l2.getStyle().setBgTransparency(255); 
      return l2; 
     } 

    }); 

    form.addComponent(list); 

    Command exitCommand = new Command("Exit") { 

     public void actionPerformed(ActionEvent e) { 
      notifyDestroyed(); 
     } 
    }; 
    form.addCommand(exitCommand); 

    form.show(); 
} 

protected void destroyApp(boolean arg0) throws MIDletStateChangeException { 

} 

protected void pauseApp() { 

} 

} 

Выпуск № 1:

Как вы можете видеть, я удалить маржу, отступы и границы как на самом списке и по всем элементам. Однако на эмуляторе nokia s40 я всегда вижу маркер 2px вокруг всех элементов.

Я забыл какой-либо другой стиль, который нужно изменить для этого? Я посмотрел на getSideGap и getBottomGap, но они не вызывают проблемы.

Выпуск № 2:

Как мы можем выделить элемент на прессе? установка нажатого или выбранного стиля не делала различий, и возврат компонента фокусировки также не делал разницы при нажатии. Было бы неплохо иметь некоторую сенсорную обратную связь (я ориентируюсь только на сенсорные устройства, поэтому фокус не является проблемой)

ответ

0

Ошибка в записях между записями в ContainerList в LWUIT, которая была исправлена ​​для Codename One. Как правило, список контейнеров создает поддельные записи для соответствия каждой записи внутри, и они имеют по умолчанию/margin. Я не знаю, есть ли временное решение, поскольку мы больше не работаем над LWUIT, и я не думаю, что кто-то серьезно его поддерживает.

Установка по умолчанию padding/margin на 0 может обойти эту проблему, но также может повлиять на все. Я бы предложил перейти на Codename One как более эффективную стратегию.

+0

Установка значения по умолчанию и поля на 0 решила проблему. Я хотел бы поблагодарить вас за все ваши сообщения. Каждый раз, когда у меня были проблемы с LWUIT, googling всегда приводил к вашим сообщениям, где я нашел ответ, который я искал. – lbarbosa

+0

@martinezpt Как именно вы установили «заполнение и маржа по умолчанию»? Существует ли глобальное дополнение и маржа для всех компонентов? –

+0

При создании темы (с помощью редактора тем) вы будете иметь запись с названием «стиль по умолчанию», которая является стилем, который будет применяться к каждому компоненту по умолчанию. Хитрость здесь заключается в том, что для этого стиля по умолчанию не требуется отступ и маржа, и если вам нужно отступы и поля на других компонентах, просто добавьте для них определенные стили. Вы можете узнать больше о темах LWUIT здесь: http://docs.oracle.com/javame/dev-tools/lwuit-1.4/LWUIT_Developer_Guide_HTML/cjbcgcdd.html – lbarbosa

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

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