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