【问题标题】:How to prevent scrolling in one direction in a HorizontalFieldManager?如何防止在 Horizo​​ntalFieldManager 中向一个方向滚动?
【发布时间】:2011-04-14 15:02:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: blackberry


    【解决方案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 在那里,因为它在没有它的情况下剪切了光标。如果您也愿意,我可以编辑这篇文章以包含它。

    【讨论】:

    • 谢谢。自从发布这个问题以来,我的方向略有不同。我现在连接到 HFM 的 scrollChanged 事件,测量编辑框中文本的宽度,并使用setHorizontalScroll 将滚动限制为刚好足以在右侧显示光标。当用户将光标向左移动时,我仍然需要注意,因为它目前正在消失。
    • 顺便说一句,这段代码似乎完美地适应了光标,通常是空格的宽度:this.getFont().getAdvance(this.getText() + " ")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多