试图通过JNI制作java UI

时间:2016-04-06 18:34:40

标签: android java-native-interface native-activity

我有一个基于NativeInterface的应用程序,因此主要是用C ++编写的。我想在屏幕上有一些标准的UI元素,所以我写了一个小的java类,其方法应该在调用时将UI放在屏幕上。这样,当我想要在屏幕上显示内容时,我可以通过JNI触发它。

这是功能:

public static void initLogWindow(Activity activity) {
  class RunnableSetupWindow implements Runnable {
    public Activity activity;
    @Override
    public void run() {
      LinearLayout linear_layout = new LinearLayout(activity);
      ScrollView scroll_view = new ScrollView(activity);
      TextView text_view = new TextView(activity);
      linear_layout.addView(scroll_view);
      scroll_view.addView(text_view);
      Window window = activity.getWindow();
      window.takeSurface(null);
      window.setContentView(linear_layout);
      LoggingUtils.text_view = text_view;

      text_view.setText("Hello world!");
    }
  }
  RunnableSetupWindow setup_window = new RunnableSetupWindow();
  text_view = null;
  setup_window.activity = activity;
  new Handler(Looper.getMainLooper()).post(setup_window);
}

当我从JNI触发时,屏幕上没有显示任何内容。非常痛苦。如果我在函数中包含Log语句,它们就会很好地打印到控制台,所以我知道它已被调用。但它没有在设备的屏幕上放置任何东西。

奇怪的是,如果我将这段代码剪切并粘贴到一个随机的空白项目中,它就能满足我的需求。出现文本框。很明显,这段代码能够在屏幕上显示文本字段。

如果我转到我的C ++代码,并用这个方法中的所有内容的JNI等效替换我的JNI调用(调用此方法),那么它也可以工作。

我已经验证了正在调用java方法。文本字段显然正在制作并且持续存在 - 我可以检查和操作它的文本,从代码的角度来看,一切看起来都很好。它只是没有出现在屏幕上。

任何人都知道为什么?

0 个答案:

没有答案