2012-02-01 57 views
0

我正嘗試在Android平臺上的LWUIT應用程序中使用本機組件。在LWUIT中使用Android本地組件時出現IllegalArgumentException

private Component createNativeTextEdit() { 
    final Object[] result = new Object[1]; 

    AndroidImplementation.runOnAndroidUIThreadAndWait(LWUITActivity.currentActivity, new Runnable() { 
     @Override 
     public void run() { 
      EditText nativeView = new EditText(LWUITActivity.currentActivity); 
      nativeView.setText("Type here.."); 

      result[0] = PeerComponent.create(nativeView); 
     } 
    }); 

    return (Component)result[0]; 
} 

我然後將一個部件的形式內:

mMainForm = new Form(); 
mMainForm.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); 

mMainForm.addComponent(createNativeTextEdit()); 

mMainForm.show(); 

然後我得到一個「拋出:IllegalArgumentException:寬度和高度必須> 0」時,系統會嘗試繪製新形式。我將問題追溯到對AndroidImplementation.PeerWrapper.getBuffer()的調用,getWidth()和getHeight()返回的值分別爲width = 474和height = 0。

高度應該如何設置?我錯過了什麼?

你知道一個在Android上使用PeerComponent的工作示例程序嗎?我搜索了網頁,但只能找到一些片段,它不清楚代碼被調用的地方,它執行的線程等。

謝謝。

回答

1

我想出了這個問題。

我正在使用Android的LWUIT 1.5 thorsten_s端口。

的問題是,LWUIT計算部件優選尺寸之前加入天然視圖所以寬度和高度被設置爲0

修復它是調用在PeerWrapper View.measure()在該方式創建時間將其初始化爲首選大小。

內部AndroidImplementation.java在構造爲PeerWrapper類的末尾添加一行:

測量(MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED) MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED ));

這完全解決了這個問題。我現在可以在LWUIT窗體中使用AnalogClock,DatePicker和本機EditText等組件。

0

這種事情在Codename One實施中適用於我們。我不確定Thorsten的港口發生了什麼事情,因爲我們現在已經非常分叉了。我們打算通過本地訪問演示發佈Codename One,演示將訪問本地窗口小部件。

+0

謝謝謝!有沒有辦法讓我的手在你的端口上?不幸的是我很快就需要解決方案。謝謝。 – 2012-02-02 14:05:38

相關問題