2011-11-19 65 views
0

我遇到了一個奇怪的問題:我有一個屏幕使用默認的VerticalFieldManager .... super(USE_ALL_WIDTH | USE_ALL_HEIGHT); .....我們添加了24個附加字段。這些附加字段的類型爲RichTextField,NullField,TextField和ObjectChoiceField。此屏幕只是一個CRUD表單...用於輸入要發送到後端服務器的數據。滾動問題 - 很難「進入」屏幕底部的字段

有趣的是,我不能使用小的TrackPad(真實設備和模擬器是9850 Torch 2的)來導航到屏幕底部的字段。由於這是一個基於觸摸的設備,我可以向上「拖動」屏幕以暴露底部但是僅在顯示虛擬鍵盤之後的那些字段。

根據MainManager.getVirtualHeight()方法,我的虛擬高度是970像素,我的可見高度是800(火炬2)。這些字段低於最初的「可查看內容區域」,並且需要滾動才能到達,我無法使用觸控板將焦點放置在屏幕下邊緣以下的某個TextField中.....點實際上,我可能可以在那裏放置焦點,但屏幕仍然不會向上滾動較低的字段,以便用戶可以看到它們。

這是一個非常簡單的實現:

public class GetDataScreen extends MainScreen ..... 

public GetDataScreen() 
{ 
    super(MainScreen.USE_ALL_WIDTH | MainScreen.USE_ALL_HEIGHT); 

    add(field1); 
    add(field2); 
    .... 
    ... 
    .. 
    . 
} 

是什麼導致這或如何解決它有什麼想法?對於記錄我也試過呼籲:

super(MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR | MainScreen.USE_ALL_WIDTH | MainScreen.USE_ALL_HEIGHT); 

.....希望能解決它,但它沒有任何區別。特別是當一個文本框是不是屏幕本身的高 -

感謝

回答

2

好吧..配合試驗和錯誤後,我做了一些事情(完全絕望),它的工作!這太愚蠢了,如果不是因爲其他人可能有同樣的問題,我會保持這個自己.....

我只是創建了一個VerticalFieldManager,我添加了所有的字段然後將VFM添加到屏幕上。實際上,這應該沒有什麼區別,因爲屏幕上的默認管理器是VFM。沒有其他的。沒有其他屬性設置,方法稱爲事件.... nada。

去圖。

+1

你的情況與我在一年前發現的其中一個類似:5。0/9550,當屏幕內容是幾個屏幕高度時,尤其是瀏覽器字段在內時,VFM會錯誤地計算大小,並且不能全部滾動到底部,差異與內容大小成比例。但是,如果您是從VFM衍生出來的 - 這不會發生。真的,沒有更多,只是分類。從「mgr = new VirtualFieldManager();」更改到「mgr = new VirtualFieldManager(){};」訣竅。我已經徹底地進行了測試,並且它是框架中的100%確定性錯誤。 Java用戶,去圖那個! :)))) – quetzalcoatl

1

,當你在屏幕上有大的TextField我已經看到了OS6 +這個問題。如果將文本字段拆分爲多個較小的字段,則應該有所幫助。

編輯:
或者,您可以編寫自己的VerticalFieldManager,這是我使用的最終解決方案。我有一些定製,但核心佈局並不像你想象的那麼複雜。這不會對子字段進行左/右/中心對齊,但如果您需要,可以輕鬆添加它。

public class MyVerticalFieldManager extends Manager { 
    protected MyVerticalFieldManager(long style){ 
     super(
      style | 
      ((style & Manager.VERTICAL_SCROLL_MASK) == 0 ? Manager.VERTICAL_SCROLL : 0) | 
      ((style & Manager.VERTICAL_SCROLLBAR_MASK) == 0 ? Manager.VERTICAL_SCROLLBAR : 0)); 
    } 

    protected void sublayout(int width, int layoutHeight) { 
     int height = Integer.MAX_VALUE; 
     int lastY = 0; 
     int lastBottomMargin = 0; 
     final int fieldCount = this.getFieldCount(); 
     for(int i = 0; i < fieldCount; i++) { 
      Field f = this.getField(i); 
      int margin = Math.max(lastBottomMargin, f.getMarginTop()); 
      final int x = f.getMarginLeft(); 
      final int y = lastY + margin; 
      final int maxWidth = width-(f.getMarginLeft()+f.getMarginRight()); 
      final int maxHeight = height - y; 
      this.layoutChild(f, maxWidth, maxHeight); 
      this.setPositionChild(f, x, y); 
      lastY = y + f.getHeight(); 
      lastBottomMargin = f.getMarginBottom(); 
     } 
     this.setVirtualExtent(width, lastY + lastBottomMargin); 
     this.setExtent(width, layoutHeight); 
    } 
} 
+0

感謝您的反饋 - 不幸的是,事實並非如此。這些是單行字段......實際上甚至沒有內容。大約1/2的字段有一個自定義的焦點偵聽器集合(我改變了TextFields的邊界,當他們有焦點時),有人認爲這可能是原因,但結果不是。任何額外的想法都非常受歡迎和鼓勵 - 謝謝邁克爾。 – BonanzaDriver