1

我正在尝试使用Horizo ​​ntalFieldManager 分别在 LEFT 和 RIGHT 上对齐CheckBoxFieldTextField。但不幸的是,TextField 永远不可见。

我用两个按钮尝试了相同的代码,并且按钮可见,没有任何问题(一个按钮在屏幕的右上角,另一个在屏幕的左角)。

但我不确定,如果我使用 CheckBoxField,为什么我不能达到同样的效果。这是我的代码,

checkBoxHorizontalFieldManager=new HorizontalFieldManager(HorizontalFieldManager.USE_ALL_WIDTH);
keepLoggedCheckboxField=new CheckboxField("keep Me Logged In", true,CheckboxField.FIELD_LEFT);

forgotPasswordTextField=new TextField(TextField.FIELD_RIGHT);
forgotPasswordTextField.setText("Forgot Password?");
checkBoxHorizontalFieldManager.add(keepLoggedCheckboxField);
checkBoxHorizontalFieldManager.add(forgotPasswordTextField);
add(checkBoxHorizontalFieldManager);

截屏

我什至尝试减少两个字段的文本长度。但仍然是同样的问题。

4

1 回答 1

2

我认为这里有两个问题。

场对齐

问题是 aHorizontalFieldManager不使用FIELD_RIGHT您在文本字段上设置的标志。 HorizontalFieldManager只需在添加字段时从左到右布置字段。在这里查看更多

您可以通过几种方式解决此问题。 请参阅此问题以获取两种解决方案。

文本字段宽度

我相信TextField默认情况下它也会占用所有可用宽度,并且默认情况下它会在字段的左侧布置其文本。因此,解决场对齐问题是不够的。您可以通过以下两种方式来解决此问题:使TextField绘制的文本右对齐,或缩小 的宽度TextField以刚好适合文本。

对于第一个解决方案,您可以查看我在此处添加的示例博客文章。

对于第二种解决方案,您可以Field#layout()TextField类中覆盖。该解决方案与一个场对齐解决方案相结合,可能如下所示:

checkBoxHorizontalFieldManager = new HorizontalFieldManager(HorizontalFieldManager.USE_ALL_WIDTH);
keepLoggedCheckboxField = new CheckboxField("keep Me Logged In", true, CheckboxField.FIELD_LEFT);
checkBoxHorizontalFieldManager.add(keepLoggedCheckboxField);

forgotPasswordTextField = new TextField(TextField.FIELD_RIGHT) {
    protected void layout(int w, int h) {
        super.layout(w, h);
        Font f = getFont();
        setExtent(getPaddingLeft() + f.getAdvance(getText()) + getPaddingRight(), 
                getPaddingTop() + f.getHeight() + getPaddingBottom());
    }
};
forgotPasswordTextField.setText("Forgot Password?");

VerticalFieldManager vfm = new VerticalFieldManager(Manager.USE_ALL_WIDTH);
vfm.add(forgotPasswordTextField);

checkBoxHorizontalFieldManager.add(vfm);
add(checkBoxHorizontalFieldManager);    
于 2013-09-06T21:23:44.033 回答