我正在尝试在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的工作示例程序吗?我搜索了网页,但只能找到一些片段,其中不清楚代码的调用位置,执行哪个线程等。
感谢。
答案 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,它将演示对本机窗口小部件的访问。