如何在表单中显示Android textView?

时间:2018-01-10 19:07:51

标签: android codenameone

我试图在我的表单中显示一个简单的原生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上进行测试

1 个答案:

答案 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();

请注意,以您的方式放置组件是不可取的。我们支持"大票"项目。例如。地图,浏览器,视频等。

他们都处理自己的滚动/手势行为。这使得它们与我们的轻量级小部件更好地集成。