gpt4 book ai didi

java - Android Studio TextView 初始化 C++

转载 作者:行者123 更新时间:2023-12-02 00:07:14 24 4
gpt4 key购买 nike

我正在尝试通过 C++ 创建一个新的 TextView。我的问题是初始化一个新的 TextView。没有这样的方法可以通过 init 进行。类(class)本身很大,我似乎找不到我想要的东西。总而言之,我需要一个 TextView 方法来在 C++ 中调用来替换 new在java中。

这是我迄今为止正在处理的内容。另外,是的,我知道我仍然需要实现更多代码才能将 View 添加到屏幕上。

jclass textView = env->FindClass("android/widget/TextView");
jmethodID newTextView = env->GetStaticMethodID(textView, "<init>", "(Landroid/content/Context;)Landroid/widget/TextView");
jmethodID setText = env->GetMethodID(textView, "setText", "(Ljava/lang/CharSequence;)V");
env->CallVoidMethod(env->CallStaticObjectMethod(textView, newTextView, "Lcom/menu/Beyond;"), setText, env->NewStringUTF("TextView Spawned"));

更新1一个新想法是简单地从 C++ 调用 java 方法来创建一个新的 TextView。它将将此 TextView 对象存储到可从 c++ 访问的全局 TextView 数组中。我以前没有从 C++ 访问过 java 字段,所以如果有人能比我先一步,我将不胜感激。如果有人有一个解决方案,可以在不使用 java 的情况下从 c++ 初始化一个新的 TextView,那将更加感激。

最佳答案

尽管<init>是红色的,看起来无效,一旦编译运行,这个方法确实可以使用。现在就创建这个新的 TextView 而言,使用 NewObject 来执行此操作。下面是用于创建这个新 TextView 的代码。请记住,并非所有有关添加 View 、获取 Activity/服务上下文等的内容都在这里。下面这纯粹是一个例子。


jclass textViewClass = globalEnv->FindClass("android/widget/TextView");
jmethodID textViewInit = globalEnv->GetMethodID(textViewClass, "<init>", "(Landroid/content/Context;)V");
jfieldID rebornContextID = globalEnv->GetFieldID(rebornClass, "rebornContext", "Landroid/content/Context;");
jobject rebornContext = globalEnv->GetObjectField(rebornObject, rebornContextID);
jobject textView0 = globalEnv->NewObject(textViewClass, textViewInit, rebornContext);

关于java - Android Studio TextView 初始化 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com