我试图在我的表单中显示一个简单的原生Android textView,但我无法获取textView。我使用以下代码:
public android.widget.TextView createNativeView() {
android.widget.TextView dynamicTextView = new android.widget.TextView(AndroidNativeUtil.getContext());
dynamicTextView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
dynamicTextView.setText(" Hello World ");
dynamicTextView.setGravity(android.view.Gravity.CENTER);
return dynamicTextView;
}
有了这个,我创建了一个peerComponent' view',在表单上表示这个textView:
public void start() {
if(current != null){
current.show();
return;
}
Form hi = new Form("Hi World", BoxLayout.y());
TestNativeInterface n = (TestNativeInterface)NativeLookup.create(TestNativeInterface.class);
Button connect = new Button("connect","connect");
Button start = new Button("start","start");
start.addActionListener(e -> Dialog.show("Title", n.test("front", "back"), "OK", null));
PeerComponent view = n.createNativeView();
hi.add(new Label(view.getNativePeer().getClass().getSimpleName()));
hi.add(view);
hi.add(connect);
hi.add(start);
hi.show();
}
标签正确显示文本'文本视图',正在绘制按钮,简单的actionListner可以正常工作,但textView隐藏在表单上。据我了解CN1组件,Native元素在 CN1元素后绘制。
感觉我可能错过了一块拼图。是否有像本机元素需要的.draw()函数?如何才能显示此文本视图?
在Samsung A5,Android 7.0上进行测试
答案 0 :(得分:0)
Codename One组件的首选大小方法发生在Codename One线程上。 Android本机等效方法在本机Android事件派发线程上发生,因此当您添加组件时,首选大小为0,因此组件保持不可见。
您可以使用此代码忽略首选大小:
Form myForm = new Form("Native", new BorderLayout());
TestNativeInterface n = TestNativeInterface)NativeLookup.create(TestNativeInterface.class);
if(n != null && n.isSupported()) {
PeerComponent view = n.createNativeView();
myForm.add(CENTER, view);
}
myForm.show();
请注意,以您的方式放置组件是不可取的。我们支持"大票"项目。例如。地图,浏览器,视频等。
他们都处理自己的滚动/手势行为。这使得它们与我们的轻量级小部件更好地集成。