2012-04-04 5 views
0

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

GridFieldManager gridFieldManager = new GridFieldManager(2,2, GridFieldManager.PREFERRED_SIZE_WITH_MAXIMUM); 

gridFieldManager.add(new ButtonField("Button One"), Field.FIELD_HCENTER); 
gridFieldManager.add(new ButtonField("Button Two"), Field.FIELD_RIGHT); 

gridFieldManager.add(new ButtonField("HC", Field.FIELD_HCENTER)); 
gridFieldManager.add(new ButtonField("RT", Field.FIELD_RIGHT)); 

add(gridFieldManager); 

И вот мой выход в тренажере

enter image description here

Может кто-нибудь, пожалуйста, помогите мне, чтобы выровнять кнопку Два в крайнем правом углу экрана? Любая помощь будет оценена.

+0

Check [мой ответ] (http://stackoverflow.com/a/10082358/396949) для альтернативного решения. – mrvincenzo

ответ

2

Пожалуйста, используйте этот следующий класс.

import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.container.HorizontalFieldManager; 

public class HFMLeftFieldRightField extends HorizontalFieldManager { 

private Field leftField; 
private Field rightField; 

private final static int TOP_MARGIN = 0; 
private final static int LEFT_MARGIN = 30; 

public HFMLeftFieldRightField() { 
    super(USE_ALL_WIDTH); 
} 

public HFMLeftFieldRightField(boolean isQatari) { 
    super(USE_ALL_WIDTH | Field.FIELD_LEFT); 
} 

public void sublayout(int maxWidth, int maxHeight) { 

    super.sublayout(maxWidth, maxHeight); 
    int width = getWidth(); 

    if (rightField != null) { 
    int x = width - rightField.getWidth() - LEFT_MARGIN; 
    int y = TOP_MARGIN; 
    setPositionChild(rightField, x, y); 
    } 
    if (leftField != null) { 
    int y = TOP_MARGIN+rightField.getHeight()/5; 
    int x = LEFT_MARGIN; 
    setPositionChild(leftField, 0, y); 
    } 

    setExtent(maxWidth, rightField.getHeight() + TOP_MARGIN * 2); 
} 

public void setLeftButton(Field leftField) { 
    this.leftField = leftField; 
super.add(leftField); 
} 

public void setRightButton(Field rightField) { 
    this.rightField = rightField; 
    super.add(rightField); 
} 


} 

И добавьте поле таким образом.

HFMLeftFieldRightField hfm = new HFMLeftFieldRightField(); 
hfm.setLeftButton(new EditField("Left")); 
hfm.setRightButton(new EditField("Right")); 
add(hfm); 

Подробнее http://keraisureshvblackberry.blogspot.in/2012/02/there-are-very-common-there-there-are.html

Надежда .. полезно

+0

. Подкласс() здесь избыточен. Вы можете уйти только с флажками выравнивания. – mrvincenzo

+0

спасибо Суреш. –

+0

@MrVincenzo Использование HFM означает, что вы хотите использовать конкретную горизонтальную компоновку, и невозможно использовать алгоритм горизонтальной компоновки общего назначения, который позволяет избежать перекрытия, а также удовлетворять горизонтальным ограничениям, таким как LEFT, RIGHT, CENTER на каждом подполе. Решение для HorizontalFieldManager должно игнорировать флаги горизонтального выравнивания и использовать только вертикальные флаги. Чтобы получить поведение, которое требуется OP, необходим настраиваемый менеджер. –

0

Изменение параметров стиля вашего gridFieldManager конструктора GridFieldManager.USE_ALL_WIDTH

Это должно быть, как это

GridFieldManager gridFieldManager = new GridFieldManager(2,2,GridFieldManager.USE_ALL_WIDTH); 
+0

Я пробовал это .. Но не повезло. –

+0

Затем переопределите подкласс объекта gridfieldManager и установите дочернюю позицию – Nsr

2

Похоже, вы должны использовать JustifiedHorizontalFieldManager вместо GridFieldManager. JustifiedHorizontalFieldManager не является стандартным менеджером, включенным в BlackBerry SDK, а членом набора компонентов интерфейса, выпущенных RIM позже, чтобы помочь разработчикам создавать более богатые интерфейсы интерфейса. Вы должны загрузить код из here, добавьте его в proyect, а затем включить следующую строку:

JustifiedHorizontalFieldManager justifiedManager = new JustifiedHorizontalFieldManager(buttonOne, buttonTwo, false, USE_ALL_WIDTH); 
3

В основном это все дело выравнивания флагов и свойств столбца решетки в.

Изменение стиля GridFieldManager до Manager.USE_ALL_WIDTH и установка свойств столбца на GridFieldManager.AUTO_SIZE делает все возможное пространство для разделения между двумя столбцами.

gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0); 
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0); 

Следующий фрагмент кода

GridFieldManager gridFieldManager = new GridFieldManager(2,2, Manager.USE_ALL_WIDTH); 
gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0); 
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0); 

gridFieldManager.add(new ButtonField("Button One"), Field.FIELD_LEFT); 
gridFieldManager.add(new ButtonField("Button Two"), Field.FIELD_RIGHT); 
gridFieldManager.add(new ButtonField("HC"), Field.FIELD_LEFT); 
gridFieldManager.add(new ButtonField("RT"), Field.FIELD_RIGHT); 

add(gridFieldManager); 

производит

enter image description here


Этот слегка измененный фрагмент кода

GridFieldManager gridFieldManager = new GridFieldManager(1,2, Manager.USE_ALL_WIDTH); 
gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0); 
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0); 

VerticalFieldManager vfmLeft = new VerticalFieldManager(); 
vfmLeft.add(new ButtonField("Button One", Field.FIELD_HCENTER)); 
vfmLeft.add(new ButtonField("HC", Field.FIELD_HCENTER)); 
gridFieldManager.add(vfmLeft, Field.FIELD_LEFT); 

VerticalFieldManager vfmRight = new VerticalFieldManager(); 
vfmRight.add(new ButtonField("Button Two", Field.FIELD_HCENTER)); 
vfmRight.add(new ButtonField("RT", Field.FIELD_HCENTER)); 
gridFieldManager.add(vfmRight, Field.FIELD_RIGHT); 

add(gridFieldManager); 

производит

enter image description here


Наконец, чтобы проиллюстрировать то, что я уже говорил о том доступное пространство разделяется равномерно в числе двух столбцов, следующий фрагмент кода

GridFieldManager gridFieldManager = new GridFieldManager(1,2, Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT); 
gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0); 
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0); 
gridFieldManager.setRowProperty(0, GridFieldManager.AUTO_SIZE, 0); 

VerticalFieldManager vfmLeft = new VerticalFieldManager(Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT); 
vfmLeft.setBackground(BackgroundFactory.createSolidBackground(Color.CYAN)); 
gridFieldManager.add(vfmLeft); 

VerticalFieldManager vfmRight = new VerticalFieldManager(Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT); 
vfmRight.setBackground(BackgroundFactory.createSolidBackground(Color.GRAY)); 
gridFieldManager.add(vfmRight); 

add(gridFieldManager);  

создает два столбца одинакового размера.

enter image description here

+0

Очень хороший ответ. Спасибо, что собрали его вместе. –

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