在BlackBerry UI中,右对齐问题
在BlackBerry UI中,我尝试将一些LabelFields右对齐和左对齐: 为此,我在顶层创建了一个VertiFieldManager,然后在其中添加了一个HorizontalFieldmanager,所有lalbelFields都添加到HorizontalFieldmanager中 水平字段管理器正在强制内容左对齐。 如何对齐右侧的字段 我试过间距,但在具有不同Pixcels分辨率的BB设备中,它看起来不太好在BlackBerry UI中,右对齐问题,blackberry,Blackberry,在BlackBerry UI中,我尝试将一些LabelFields右对齐和左对齐: 为此,我在顶层创建了一个VertiFieldManager,然后在其中添加了一个HorizontalFieldmanager,所有lalbelFields都添加到HorizontalFieldmanager中 水平字段管理器正在强制内容左对齐。 如何对齐右侧的字段 我试过间距,但在具有不同Pixcels分辨率的BB设备中,它看起来不太好 请告知 我对BB还是新手,但您是否尝试过更改HorizontalField的
请告知 我对BB还是新手,但您是否尝试过更改HorizontalField的长样式?我对BB还是新手,但您是否尝试过更改HorizontalField的长样式?尝试以下代码-
JustifiedHorizontalFieldManager j=new JustifiedHorizontalFieldManager(new NullField(),your_field, true);
add(j);
//下面给出了合理的HorizedHorizontalFieldManager类
public class JustifiedHorizontalFieldManager extends Manager
{
private static final int SYSTEM_STYLE_SHIFT = 32;
public Field _leftField;
public Field _rightField;
private boolean _giveLeftFieldPriority;
public JustifiedHorizontalFieldManager( Field leftField, Field rightField, boolean giveLeftFieldPriority )
{
this( leftField, rightField, giveLeftFieldPriority, Field.USE_ALL_WIDTH );
}
public JustifiedHorizontalFieldManager( Field leftField, Field rightField, boolean giveLeftFieldPriority, long style )
{
super( style );
_leftField = leftField;
_rightField = rightField;
add( _leftField );
add( _rightField );
_giveLeftFieldPriority = giveLeftFieldPriority;
}
public JustifiedHorizontalFieldManager( boolean giveLeftFieldPriority, long style )
{
super( style );
_giveLeftFieldPriority = giveLeftFieldPriority;
}
public void addLeftField( Field field )
{
if( _leftField != null ) {
throw new IllegalStateException();
}
_leftField = field;
add( _leftField );
}
public void addRightField( Field field )
{
if( _rightField != null ) {
throw new IllegalStateException();
}
_rightField = field;
add( _rightField );
}
public int getPreferredWidth()
{
return _leftField.getPreferredWidth() + _rightField.getPreferredWidth();
}
public int getPreferredHeight()
{
return Math.max( _leftField.getPreferredHeight(), _rightField.getPreferredHeight() );
}
protected void sublayout( int width, int height )
{
Field firstField;
Field secondField;
if( _giveLeftFieldPriority ) {
firstField = _leftField;
secondField = _rightField;
} else {
firstField = _rightField;
secondField = _leftField;
}
int maxHeight = 0;
int availableWidth = width;
availableWidth -= _leftField.getMarginLeft();
availableWidth -= Math.max( _leftField.getMarginRight(), _rightField.getMarginLeft() );
availableWidth -= _rightField.getMarginRight();
layoutChild( firstField, availableWidth, height - firstField.getMarginTop() - firstField.getMarginBottom() );
maxHeight = Math.max( maxHeight, firstField.getMarginTop() + firstField.getHeight() + firstField.getMarginBottom() );
availableWidth -= firstField.getWidth();
layoutChild( secondField, availableWidth, height - secondField.getMarginTop() - secondField.getMarginBottom() );
maxHeight = Math.max( maxHeight, secondField.getMarginTop() + secondField.getHeight() + secondField.getMarginBottom() );
availableWidth -= secondField.getWidth();
if( !isStyle( Field.USE_ALL_HEIGHT ) ) {
height = maxHeight;
}
if( !isStyle( Field.USE_ALL_WIDTH ) ) {
width -= availableWidth;
}
setPositionChild( _leftField, _leftField.getMarginLeft(), getFieldY( _leftField, height ) );
setPositionChild( _rightField, width - _rightField.getWidth() - _rightField.getMarginRight(), getFieldY( _rightField, height ) );
setExtent( width, height );
}
private int getFieldY( Field field, int height )
{
switch( (int)( ( field.getStyle() & FIELD_VALIGN_MASK ) >> SYSTEM_STYLE_SHIFT ) ) {
case (int)( FIELD_BOTTOM >> SYSTEM_STYLE_SHIFT ):
return height - field.getHeight() - field.getMarginBottom();
case (int)( FIELD_VCENTER >> SYSTEM_STYLE_SHIFT ):
return field.getMarginTop() + ( height - field.getMarginTop() - field.getHeight() - field.getMarginBottom() ) / 2;
default:
return field.getMarginTop();
}
}
public Field getLeftField()
{
return _leftField;
}
public Field getRightField()
{
return _rightField;
}
public void replace( Field oldField, Field newField )
{
if( oldField == newField ) {
// Nothing to do
return;
}
if( oldField == _leftField ) {
_leftField = newField;
} else if( oldField == _rightField ) {
_rightField = newField;
}
add( newField );
delete( oldField );
}
}
请尝试以下代码-
JustifiedHorizontalFieldManager j=new JustifiedHorizontalFieldManager(new NullField(),your_field, true);
add(j);
//下面给出了合理的HorizedHorizontalFieldManager类
public class JustifiedHorizontalFieldManager extends Manager
{
private static final int SYSTEM_STYLE_SHIFT = 32;
public Field _leftField;
public Field _rightField;
private boolean _giveLeftFieldPriority;
public JustifiedHorizontalFieldManager( Field leftField, Field rightField, boolean giveLeftFieldPriority )
{
this( leftField, rightField, giveLeftFieldPriority, Field.USE_ALL_WIDTH );
}
public JustifiedHorizontalFieldManager( Field leftField, Field rightField, boolean giveLeftFieldPriority, long style )
{
super( style );
_leftField = leftField;
_rightField = rightField;
add( _leftField );
add( _rightField );
_giveLeftFieldPriority = giveLeftFieldPriority;
}
public JustifiedHorizontalFieldManager( boolean giveLeftFieldPriority, long style )
{
super( style );
_giveLeftFieldPriority = giveLeftFieldPriority;
}
public void addLeftField( Field field )
{
if( _leftField != null ) {
throw new IllegalStateException();
}
_leftField = field;
add( _leftField );
}
public void addRightField( Field field )
{
if( _rightField != null ) {
throw new IllegalStateException();
}
_rightField = field;
add( _rightField );
}
public int getPreferredWidth()
{
return _leftField.getPreferredWidth() + _rightField.getPreferredWidth();
}
public int getPreferredHeight()
{
return Math.max( _leftField.getPreferredHeight(), _rightField.getPreferredHeight() );
}
protected void sublayout( int width, int height )
{
Field firstField;
Field secondField;
if( _giveLeftFieldPriority ) {
firstField = _leftField;
secondField = _rightField;
} else {
firstField = _rightField;
secondField = _leftField;
}
int maxHeight = 0;
int availableWidth = width;
availableWidth -= _leftField.getMarginLeft();
availableWidth -= Math.max( _leftField.getMarginRight(), _rightField.getMarginLeft() );
availableWidth -= _rightField.getMarginRight();
layoutChild( firstField, availableWidth, height - firstField.getMarginTop() - firstField.getMarginBottom() );
maxHeight = Math.max( maxHeight, firstField.getMarginTop() + firstField.getHeight() + firstField.getMarginBottom() );
availableWidth -= firstField.getWidth();
layoutChild( secondField, availableWidth, height - secondField.getMarginTop() - secondField.getMarginBottom() );
maxHeight = Math.max( maxHeight, secondField.getMarginTop() + secondField.getHeight() + secondField.getMarginBottom() );
availableWidth -= secondField.getWidth();
if( !isStyle( Field.USE_ALL_HEIGHT ) ) {
height = maxHeight;
}
if( !isStyle( Field.USE_ALL_WIDTH ) ) {
width -= availableWidth;
}
setPositionChild( _leftField, _leftField.getMarginLeft(), getFieldY( _leftField, height ) );
setPositionChild( _rightField, width - _rightField.getWidth() - _rightField.getMarginRight(), getFieldY( _rightField, height ) );
setExtent( width, height );
}
private int getFieldY( Field field, int height )
{
switch( (int)( ( field.getStyle() & FIELD_VALIGN_MASK ) >> SYSTEM_STYLE_SHIFT ) ) {
case (int)( FIELD_BOTTOM >> SYSTEM_STYLE_SHIFT ):
return height - field.getHeight() - field.getMarginBottom();
case (int)( FIELD_VCENTER >> SYSTEM_STYLE_SHIFT ):
return field.getMarginTop() + ( height - field.getMarginTop() - field.getHeight() - field.getMarginBottom() ) / 2;
default:
return field.getMarginTop();
}
}
public Field getLeftField()
{
return _leftField;
}
public Field getRightField()
{
return _rightField;
}
public void replace( Field oldField, Field newField )
{
if( oldField == newField ) {
// Nothing to do
return;
}
if( oldField == _leftField ) {
_leftField = newField;
} else if( oldField == _rightField ) {
_rightField = newField;
}
add( newField );
delete( oldField );
}
}
不幸的是,没有好的解决办法。比以前小的我认为:
HorizontalFieldManager hfm = new HorizontalFieldManager();
LabelField leftField = new LabelField("One");
hfm.add(leftField);
LabelField rightField = new LabelField("Two", LabelField.USE_ALL_WIDTH | DrawStyle.RIGHT);
hfm.add(rightField);
基本上,我们使用第二个字段的所有可用宽度区域,并要求它绘制右对齐的文本。
这个解决方案是可以的,因为LabeLField不可聚焦。一旦您必须处理聚焦字段,请使用@Signare的解决方案。不幸的是,没有好的解决方案。比以前小的我认为:
HorizontalFieldManager hfm = new HorizontalFieldManager();
LabelField leftField = new LabelField("One");
hfm.add(leftField);
LabelField rightField = new LabelField("Two", LabelField.USE_ALL_WIDTH | DrawStyle.RIGHT);
hfm.add(rightField);
基本上,我们使用第二个字段的所有可用宽度区域,并要求它绘制右对齐的文本。
这个解决方案是可以的,因为LabeLField不可聚焦。一旦您必须处理可聚焦字段,请使用@Signare的解决方案。IMHO,您应该指定从何处获取“JustifiedHorizontalFieldManager”。这是一个自定义类你从哪里得到的——这没关系。它对你的帮助很重要,这不是习惯。它是BlackBerry高级UI库()的一部分的
RightedHorizontalFieldManager
的精确副本。我认为他们值得表扬。所有信用都归黑莓所有。我没说这是我的密码。这是blackberry.IMHO的一个自定义类,您应该指定从何处获取“JustifiedHorizontalFieldManager”。这是一个自定义类你从哪里得到的——这没关系。它对你的帮助很重要,这不是习惯。它是BlackBerry高级UI库()的一部分的RightedHorizontalFieldManager
的精确副本。我认为他们值得表扬。所有信用都归黑莓所有。我没说这是我的密码。这是黑莓的一个定制类。