在LWUIT中使用Android本机组件时出现IllegalArgumentException

时间:2012-02-01 22:54:45

标签: android lwuit lwuit-form

我正在尝试在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和height必须> 0”。

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

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

我想出了这个问题。

我正在使用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等组件。

答案 1 :(得分:0)

这种事情在Codename One实施中对我们有用。我不太确定在Thorsten的港口发生了什么,因为我们现在几乎已经分道扬..我们打算发布带有本机访问演示的Codename One,它将演示对本机窗口小部件的访问。