2012-02-01 18 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ポートを使用しています。

問題ネイティブビューは、幅と高さの両方が0

には、AT PeerWrapperにView.measure()を呼び出すことで修正するように設定されて追加される前にLWUITは、コンポーネントの推奨サイズを計算することですそれを望ましいサイズに初期化するための作成時間。

尺度(MeasureSpec.makeMeasureSpec(0、MeasureSpec.UNSPECIFIED)、 MeasureSpec.makeMeasureSpec(0、MeasureSpec.UNSPECIFIED:PeerWrapperクラスのコンストラクタの末尾

内部AndroidImplementation.java行を追加));

これで問題は完全に解決されます。 AnalogClock、DatePicker、ネイティブEditTextなどのコンポーネントをLWUITフォームで使用できるようになりました。

0

この種のことは、Codename Oneの実装ではうまくいきます。 Thorstenの港で何が起こっているのか、私たちは今かなり分かっているので、私は確信していません。ネイティブウィジェットへのアクセスを示すネイティブアクセスデモでCodename Oneをリリースする予定です。

+0

ありがとうShai!あなたの港に手を差し伸べる方法はありますか?残念ながら私はすぐに解決策が必要です。ありがとう。 –

関連する問題