GameTextInput Android Game Development Kit का हिस्सा है.
GameTextInput
लाइब्रेरी का इस्तेमाल करना, फ़ुल-स्क्रीन Android ऐप्लिकेशन लिखने का एक आसान तरीका है. यह ऐप्लिकेशन, टेक्स्ट इनपुट के लिए सॉफ़्ट कीबोर्ड का इस्तेमाल करता है.
GameTextInput
, सॉफ़्ट कीबोर्ड को दिखाने या छि����ने, ������-��भी ��दले गए टेक्स्ट को सेट करने या पाने, और टेक्स्ट में बदलाव होने पर सूचनाएं पाने के लिए, एक आसान एपीआई उपलब्ध कराता है. यह पूरी तरह से टेक्स्ट एडिटर वाले ऐप्लिकेशन के लिए नहीं है. हालांकि, यह गेम में इस्तेमाल के सामान्य उदाहरणों के लिए, टेक्स्ट चुनने और लिखने की सुविधा देता है. साथ ही, यह लाइब्रेरी इनपुट के तरीके का एडिटर (आईएमई) की बेहतर सुविधाओं के साथ काम करती है. जैसे, स्पेलिंग की जांच करना, शब्दों को पूरा करना, और एक से ज़्यादा वर्णों वाले शब्दों को टाइप करना.
आंतरिक तौर पर, GameTextInput
इनपुट टेक्स्ट (साथ ही, इससे जुड़ी स्थितियों) को इंटरनल बफ़र GameTextInput::currentState_
में इकट्ठा करता है. साथ ही, इसमें होने वाले किसी भी बदलाव के बारे में ऐप्लिकेशन को सूचना देता है. इसके बाद, ऐप्लिकेशन अपने रजिस्टर किए गए कॉलबैक फ़ंक्शन में टेक्स्ट प्रोसेसिंग करता है.
उपलब्धता
GameTextInput
का इस्तेमाल इन तरीकों से किया जा सकता है:
GameActivity के साथ: GameActivity, GameTextInput को इंटिग्रेट करता है. GameActivity का इस्तेमाल करने वाले ऐप्लिकेशन, सिर्फ़ इंटिग्रेट किए गए GameTextInput का इस्तेमाल कर सकते हैं. इस्तेमाल करने के निर्देशों के बारे में पूरी जानकारी, GameActivity पेज पर दी गई है. GameActivity और GameTextInput इंटिग्रेशन के सैंपल के लिए, games-samples repository देखें. इस्तेमाल का यह मॉडल, इस गाइड के दायरे में नहीं आता.
स्टैंडअलोन लाइब्रेरी के तौर पर: इस गाइड के बाकी हिस्से में, इस्तेमाल करने का तरीका बताया गया है.
ध्यान दें कि ऊपर दिए गए दोनों तरीके एक-दूसरे से अलग हैं.
Jetpack games library की फ़ॉर्मल GameTextInput
रिलीज़, [Google Maven][google-maven]{:.external} में उपलब्ध हैं.
बिल्ड सेट अप करना
GameTextInput
को Android Archive (AAR) के तौर पर डिस्ट्रिब्यूट किया जाता है. इस AAR में Java क्लास और C सोर्स कोड शामिल है. यह GameTextInput
की नेटिव सुविधाओं को लागू करता है. आपको इन सोर्स फ़ाइलों को अपनी बिल्ड प्रोसेस में शामिल करना होगा. इसके लिए, Prefab
का इस्तेमाल करें. इससे नेटिव लाइब्रेरी और सोर्स कोड, आपके CMake प्रोजेक्ट या NDK बिल्ड के लिए उपलब्ध हो जाते हैं.
build.gradle
फ़ाइल मेंGameTextInput
लाइब्रेरी डिपेंडेंसी जोड़ने के लिए, Jetpack Android Games पेज पर दिए गए निर्देशों का पालन करें. ध्यान दें कि अगर आपके ऐप्लिकेशन GameActivity का इस्तेमाल कर रहे हैं, तो वे स्टैंडअलोनGameTextInput
लाइब्रेरी का इस्तेमाल नहीं कर सकते.पक्का करें कि
gradle.properties
में ये लाइनें शामिल हों:# Tell Android Studio we are using AndroidX. android.useAndroidX=true # Use Prefab 1.1.2 or higher, which contains a fix for "header only" libs. android.prefabVersion=1.1.2 # Required only if you're using Android Studio 4.0 (4.1 is recommended). # android.enablePrefab=true
game-text-input
पैकेज इंपोर्ट करें और उसे अपने प्रोजेक्ट कीCMakeLists.txt
फ़ाइल में अपने टारगेट में ��ोड़ें:find_package(game-text-input REQUIRED CONFIG) ... target_link_libraries(... game-text-input::game-text-input)
अपने गेम की किसी
.cpp
फ़ाइल में,GameTextInput
को शामिल करने के लिए यह लाइन जोड़ें:#include <game-text-input/gametextinput.cpp>
GameTextInput
C API का इस्तेमाल करने वाली सोर्स फ़ाइलों में, हेडर फ़ाइल शामिल करें:#include <game-text-input/gametextinput.h>
ऐप्लिकेशन को कंपाइल करें और चलाएं. अगर आपको CMake से जुड़ी गड़बड़ियां मिलती हैं, तो पुष्टि करें कि एएआर और
build.gradle
फ़ाइलें सही तरीके से सेट अप की गई हैं. अगर#include
फ़ाइल नहीं मिलती है, तो अपनीCMakeLists.txt
कॉन्फ़िगरेशन फ़ाइल की पुष्टि करें.
अपने बिल्ड को इंटिग्रेट करना
JVM या ऐप्लिकेशन के मुख्य थ्रेड से पहले से अटैच किए गए अपने C थ्रेड से,
JNIEnv
पॉइंटर के साथGameTextInput_init
को कॉल करें.static GameTextInput* gameTextInput = nullptr; extern "C" JNIEXPORT void JNICALL Java_com_gametextinput_testbed_MainActivity_onCreated(JNIEnv* env, jobject this) { { if(!gameTextInput) gameTextInput = GameTextInput_init(env); ... }
InputConnection
को ऐक्सेस करने वालीInputEnabledTextView
Java क्लास बनाएं.public class InputEnabledTextView extends View implements Listener { public InputConnection mInputConnection; public InputEnabledTextView(Context context, AttributeSet attrs) { super(context, attrs); } public InputEnabledTextView(Context context) { super(context); } public void createInputConnection(int inputType) { EditorInfo editorInfo = new EditorInfo(); editorInfo.inputType = inputType; editorInfo.actionId = IME_ACTION_NONE; editorInfo.imeOptions = IME_FLAG_NO_FULLSCREEN; mInputConnection = new InputConnection(this.getContext(), this, new Settings(editorInfo, true) ).setListener(this); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { if (outAttrs != null) { GameTextInput.copyEditorInfo(mInputConnection.getEditorInfo(), outAttrs); } return mInputConnection; } // Called when the IME input changes. @Override public void stateChanged(State newState, boolean dismissed) { onTextInputEventNative(newState); } @Override public void onImeInsetsChanged(Insets insets) { // handle Inset changes here } private native void onTextInputEventNative(State softKeyboardEvent); }
बनाए गए
InputEnabledTextView
को यूज़र इंटरफ़ेस (यूआई) लेआउट में जोड़ें. उदाहरण के लिए,activity_main.xml
में मौजूद यह कोड, विज्ञापन को स्क्रीन पर सबसे नीचे दिखा सकता है:<com.android.example.gametextinputjava.InputEnabledTextView android:id="@+id/input_enabled_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
अपनी Java गतिविधि में इस नई
InputEnabledTextView
क्लास को वापस पाएं. व्यू बाइंडिंग का इस्तेमाल करने पर, यह काम आसानी से किया जा सकता है:public class MainActivity extends AppCompatActivity { ... private ActivityMainBinding binding; private InputEnabledTextView inputEnabledTextView; private native void setInputConnectionNative(InputConnection c); @Override protected void onCreate(Bundle savedInstanceState) { ... binding = ActivityMainBinding.inflate(getLayoutInflater()); inputEnabledTextView = binding.inputEnabledTextView; inputEnabledTextView.createInputConnection(InputType.TYPE_CLASS_TEXT); setInputConnectionNative(inputEnabledTextView.mInputConnection); }
अपनी C लाइब्रेरी में,
inputConnection
कोGameTextInput_setInputConnection
में पास करें. इवेंट की सूचना पाने के लिए,GameTextInput_setEventCallback
में कॉलबैक पास करें. इससे आपको C स्टेट स्ट्रक्चरGameTextInputState
के तौर पर सूचना मिलेगी.extern "C"JNIEXPORT void JNICALL Java_com_gametextinput_testbed_MainActivity_setInputConnectionNative( JNIEnv *env, jobject this, jobject inputConnection) { GameTextInput_setInputConnection(gameTextInput, inputConnection); GameTextInput_setEventCallback(gameTextInput,[](void *ctx, const GameTexgtInputState *state) { if (!env || !state) return; // process the newly arrived text input from user. __android_log_print(ANDROID_LOG_INFO, "TheGreateGameTextInput", state->text_UTF8); }, env); }
अपनी C लाइब्रेरी में,
GameTextInput_processEvent
को कॉल करें. यह फ़ंक्शन, पिछले चरण में रजिस्टर किए गए कॉलबैक को इंटरनल तौर पर कॉल करता है. इससे आपका ऐप्लिकेशन, स्थिति में बदलाव होने पर इवेंट को हैंडल कर पाता है.extern "C" JNIEXPORT void JNICALL Java_com_gametextinput_testbed_InputEnabledTextView_onTextInputEventNative( JNIEnv* env, jobject this, jobject soft_keyboard_event) { GameTextInput_processEvent(gameTextInput, soft_keyboard_event); }
उपयोगिता फ़ंक्शन
GameTextInput
लाइब्रेरी में ऐसे यूटिलिटी फ़ंक्शन शामिल होते हैं जिनकी मदद से, Java स्टेट ऑब्जेक्ट और C स्टेट स्ट्रक्चर के बीच कन्वर्ज़न किया जा सकता है. GameTextInput_showIme
और GameTextInput_hideIme
फ़ंक्शन के ज़रिए, IME को दिखाने और छिपाने की सुविधा का ऐक्सेस.
रेफ़रंस
GameTextInput
की मदद से ऐप्लिकेशन बनाते समय, डेवलपर के लिए ये चीज़ें काम की हो सकती हैं:
- GameTextInput टेस्ट ऐप्लिकेशन
- GameActivity के साथ GameTextInput का इस्तेमाल करना
- GameTextInput का रेफ़रंस दस्तावेज़
- GameTextInput का सोर्स कोड
सुझाव/राय दें या शिकायत करें
GameTextInput
से जुड़ी किसी भी समस्या और सवाल के लिए, Google IssueTracker पर एक बग बनाएं.