1

AndroidプラットフォームのLWUITアプリでネイティブコンポーネントを使用しようとしています。

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:width and height mustbe>0」が発生します。

問題をAndroidImplementation.PeerWrapper.getBuffer()の呼び出しまで追跡し、getWidth()とgetHeight()によって返される値はwidth=474とheight=0です。

高さはどのように設定されますか?私は何が欠けていますか?

AndroidでPeerComponentを使用する実用的なサンプルプログラムを知っていますか?Webを検索しましたが、コードがどこから呼び出されているか、どのスレッドで実行されているかなどが明確でないスニペットしか見つかりませんでした。

ありがとう。

4

2 に答える 2

2

私は問題を理解しました。

Android 用の LWUIT 1.5 thorsten_s ポートを使用しています。

問題は、ネイティブ ビューが追加される前に LWUIT がコンポーネントの推奨サイズを計算するため、幅と高さの両方が 0 に設定されることです。

これを修正する方法は、作成時に PeerWrapper で View.measure() を呼び出して、好みのサイズに初期化することです。

PeerWrapper クラスのコンストラクターの末尾にある AndroidImplementation.java 内に次の行を追加します。

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

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

于 2012-02-03T23:07:57.583 に答える
0

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

于 2012-02-02T10:26:12.607 に答える