Выбор layout manager (на русский это лучше не переводить) в библиотеке BlackBerry явно не блещет разнообразием. Абстрактный Manager и его наследники FlowFieldManager, HorizontalFieldManager, VerticalFieldManager - все, на что решились ребята из RIM (есть конечно еще DialogFieldManager, но это комбинация предыдущих...).
Может этого и хватит для страшненького простенького интерфейса, но для чего-то более приятного глазу явно мало. В официальной документации советуют создавать собственные имплементации, чем и приходится заниматься.
Наиболее востребованными оказались 2 метода расположения элементов:
- слоистый (каждый следующий добавленный элемент располагается сверху предыдущего, левый верхний угол - точка (0,0))
- абсолютный (элементы помещаются на родителя с указанием абсолютных координат (x,y) )
вот что из этого получилось. Метод №1:
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Manager;
public class AXHSimpleLayeredFieldManager extends Manager {
public AXHSimpleLayeredFieldManager(long l) {
super(l);
}
protected void sublayout(int width, int height) {
//Display.getWidth() || Graphics.getScreenWidth()
int maxWidth = Config.SCREEN_WIDTH;
//Display.getHeight() || Graphics.getScreenHeight()
int maxHeight = Config.SCREEN_HEIGHT;//
for (int i = 0, n = getFieldCount(); i < n; i++) {
Field field = getField(i);
layoutChild(field, Display.getWidth(), Display.getHeight());
long fieldStyle = field.getStyle();
long fieldHalign = fieldStyle & Field.FIELD_HALIGN_MASK;
int fieldXOffset = 0;
if (fieldHalign == Field.FIELD_RIGHT) {
fieldXOffset = maxWidth - field.getWidth();
} else if (fieldHalign == Field.FIELD_HCENTER) {
fieldXOffset = (maxWidth - field.getWidth()) / 2;
}
int fieldYOffset = 0;
long fieldValign = fieldStyle & Field.FIELD_VALIGN_MASK;
if (fieldValign == Field.FIELD_BOTTOM) {
fieldYOffset = maxHeight - field.getHeight();
} else if (fieldValign == Field.FIELD_VCENTER) {
fieldYOffset = (maxHeight - field.getHeight()) / 2;
}
setPositionChild(field, fieldXOffset, fieldYOffset);
}
setExtent(maxWidth, maxHeight);
}
}
Комментариев нет:
Отправить комментарий