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:宽度和高度必须> 0”。

我将问题追溯到对 AndroidImplementation.PeerWrapper.getBuffer() 的调用,getWidth() 和 getHeight() 返回的值是 width=474 和 height=0。

高度应该如何设置?我错过了什么?

您知道在 Android 上使用 PeerComponent 的工作示例程序吗?我搜索了网络,但只能找到一些片段,其中不清楚代码是从哪里调用的,它是在哪个线程上执行的等等。

谢谢。

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));

这完全解决了问题。我现在可以在 LWUIT 表单中使用 AnalogClock、DatePicker 和本机 EditText 等组件。

于 2012-02-03T23:07:57.583 回答
0

这类事情在Codename One实现中对我们有用。我不确定 Thorsten 的港口发生了什么,因为我们现在已经分叉了。我们打算发布带有本机访问演示的 Codename One,该演示将演示对本机小部件的访问。

于 2012-02-02T10:26:12.607 回答