如何防止在水平FieldManager中向一个方向滚动?

时间:2011-04-14 15:02:56

标签: blackberry

我需要一个单行编辑字段,可以接受比编辑字段宽度更长的文本(如“普通”Windows文本框)。

由于BasicEditField控件通常是自动换行其内容,因此我通过将BasicEditField放在允许水平滚动的Horizo​​ntalFieldManager中来实现此要求。

这在某种意义上是有效的:如果我输入的文字长于编辑字段的宽度,则HFM会自动向左滚动(带有编辑字段),使光标在右侧可见。

问题是用户可以从右向左滑动,这会将BasicEditField完全移出屏幕左侧。我希望只能在BasicEditField的内容太宽而无法完全显示的情况下向左滚动,并且只允许向左滚动以保持光标在右侧可见。

1 个答案:

答案 0 :(得分:1)

在实现我自己的EditField时,我打了这个确切的场景。发生的事情是因为你允许水平滚动,并且EditField本质上想要尽可能多地使用宽度,你最终得到一个非常宽的EditField。我正在从我的代码中复制这个,所以希望它对你有用,但如果它没有添加评论,我会试着看看我是否能帮助它运行。

EditField edit = new EditField(EditField.NO_NEWLINE | style) {

        protected void fieldChangeNotify(int context) {
            try{
                super.fieldChangeNotify(context);
                setExtent(this.getFont().getAdvance(this.getText()) + 10, this.getHeight());
            }
            catch(Exception e){
                //don't recall why I needed this, but it works so I'm hesitant to remove it
            }

        }
        protected void layout(int width, int height) {
            super.layout(width, height);
            setExtent(this.getFont().getAdvance(this.getText()) + 10, this.getHeight());
        }
    };

这样做会逐渐使EditField随着文本的增长而变宽。我在HFM里面也有这个,但也可能不需要它。我这样做是因为如果字段比屏幕宽度宽,而不是滚动整个屏幕,您可以让这个单个字段水平滚动。此外,+ 10在那里,因为它没有它剪切光标。如果您愿意,我也可以编辑此帖子以包含它。