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

在LWUIT中使用Android本机组件时出现IllegalArgumentException,android,lwuit,lwuit-form,Android,Lwuit,Lwuit Form,我正在尝试在Android平台上的LWUIT应用程序中使用本机组件 private Component createNativeTextEdit() { final Object[] result = new Object[1]; AndroidImplementation.runOnAndroidUIThreadAndWait(LWUITActivity.currentActivity, new Runnable() { @Override p

我正在尝试在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.PeerRapper.getBuffer()的调用,getWidth()和getHeight()返回的值分别为width=474和height=0

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

你知道有一个在Android上使用PeerComponent的工作示例程序吗?我搜索了web,但只能找到一些片段,其中不清楚代码从何处调用,在哪个线程上执行,等等


谢谢。

在实现过程中,这种方法对我们很有效。我不太清楚托尔斯滕港口发生了什么,因为我们现在几乎已经分岔了。我们打算发布带有本机访问演示的Codename One,演示对本机小部件的访问

我解决了这个问题

我正在为Android使用LWUIT 1.5 thorsten_的端口

问题在于,LWUIT在添加本机视图之前计算组件的首选大小,因此宽度和高度都设置为0

修复它的方法是在创建时调用PeerRapper上的View.measure(),将其初始化为首选大小

在PeerRapper类构造函数末尾的AndroidImplementation.java中,添加以下行:

测量(测量等级makeMeasureSpec(0,测量等级未指定), MeasureSpec.makeMeasureSpec(0,MeasureSpec.unspect))


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

谢谢你,谢!有没有办法让我把手放在你的港口?不幸的是,我需要一个解决方案,而不是很快。谢谢