2011-04-14 68 views
0

我有一个行编辑字段可以接受的文字长于编辑字段的宽度(像一个“正常”的Windows文本框)的要求。如何防止Horizo​​ntalFieldManager中的单向滚动?

由于BasicEditField控制正常字包装的内容,我已经把我的BasicEditField一个Horizo​​ntalFieldManager允许水平滚动内部实现这一要求。

该作品在一个感觉:如果我键入文本不是在编辑栏的宽度越长,HFM自动滚动到这使光标移动到右侧可见左(以编辑字段与它)。

的问题是,用户可以向右滑动到左,完全移动BasicEditField关闭屏幕左侧。我希望只能在BasicEditField的内容太宽而无法完整显示时才能向左滚动,并且只允许向左滚动以使光标保持在右侧。

回答

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在那里,因为它没有它剪裁光标。如果你想这样做,我可以编辑这个帖子来包含它。

+0

谢谢。自发布此问题以来,我的方向稍有不同。我现在连接到HFM的scrollChanged事件中,测量编辑框中文本的宽度,并使用'setHorizo​​ntalScroll'将滚动限制到恰好显示光标的位置。当用户将光标移动到左侧时,我仍然需要继续,因为它现在正在消失。 – MusiGenesis 2011-04-14 16:50:17

+0

顺便说一句,这代码似乎完全容纳光标,它通常是一个空间的宽度:'this.getFont()getAdvance(this.getText()+““)'。 – MusiGenesis 2011-04-14 16:51:40