Android Studio TextView 初始化 C++
Android Studio TextView Init C++
我正在尝试通过 C++ 创建一个新的 TextView。我的问题是初始化一个新的 TextView。 init 没有这样的方法。 class 本身很大,我似乎找不到我要找的东西。总而言之,我需要一个 TextView 方法来调用 C++ 来替换 java 中的 new
。
这是我目前正在处理的内容。另外,是的,我知道我仍然需要实现更多代码才能将视图添加到我的屏幕。
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 对象存储到一个全局 TextView 数组中,该数组可以从 C++ 访问。我以前没有从 c++ 访问过 java 字段,所以如果有人能抢先一步,我将不胜感激。如果有人有解决方案,可以在没有 java 的情况下从 c++ 初始化一个新的 TextView,那将不胜感激。
虽然<init>
是红色的,看起来是无效的,但是编译后运行,这个方法确实可以用。现在就创建这个新的 TextView 而言,NewObject 用于这样做。下面是用于创建这个新 TextView 的代码。请记住,并不是所有关于添加视图、获取 activity/service 上下文等的内容都在这里。下面这纯粹是一个例子。
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);
我正在尝试通过 C++ 创建一个新的 TextView。我的问题是初始化一个新的 TextView。 init 没有这样的方法。 class 本身很大,我似乎找不到我要找的东西。总而言之,我需要一个 TextView 方法来调用 C++ 来替换 java 中的 new
。
这是我目前正在处理的内容。另外,是的,我知道我仍然需要实现更多代码才能将视图添加到我的屏幕。
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 对象存储到一个全局 TextView 数组中,该数组可以从 C++ 访问。我以前没有从 c++ 访问过 java 字段,所以如果有人能抢先一步,我将不胜感激。如果有人有解决方案,可以在没有 java 的情况下从 c++ 初始化一个新的 TextView,那将不胜感激。
虽然<init>
是红色的,看起来是无效的,但是编译后运行,这个方法确实可以用。现在就创建这个新的 TextView 而言,NewObject 用于这样做。下面是用于创建这个新 TextView 的代码。请记住,并不是所有关于添加视图、获取 activity/service 上下文等的内容都在这里。下面这纯粹是一个例子。
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);