GameActivity में TextInput Android Game Development Kit का हिस्सा है.
GameActivity, GameTextInput को इन तरीकों से इंटिग्रेट करता है:
- रैपर उपलब्ध कराना
- नए टेक्स्ट इनपुट इवेंट की उपलब्धता के लिए फ़्लैग बनाना
- टेक्स्ट कॉन्टेंट के लिए, GameTextInput के स्टेट बफ़र का सीधे तौर पर इस्तेमाल करना
यहां दिए गए डायग्राम में दिखाया गया है कि ऐप्लिकेशन, उपयोगकर्ता से टेक्स्ट इनपुट लेने के लिए अलग-अलग इंटरनल लॉजिकल कॉम्पोनेंट का इस्तेमाल करते हैं:
पहले से मौजूद GameTextInput
लाइब्रेरी का इस्तेमाल करने के लिए, ये तीन मुख्य चरण हैं:
- यूज़र इंटरफ़ेस (यूआई) पर सॉफ़्ट कीबोर्ड को कंट्रोल करना
- नया टेक्स्ट उपलब्ध होने पर सूचना पाना
- उपयोगकर्ता के डाले गए टेक्स्ट और उसकी स्थितियों को वापस पाना
इस दस्तावेज़ के बाकी हिस्सों में, इनके बारे में ज़्यादा जानकारी दी गई है. GameActivity
के साथ GameTextInput
के इस्तेमाल का उदाहरण देखने के लिए, games-samples repository देखें.
यूज़र इंटरफ़ेस (यूआई) पर सॉफ़्ट कीबोर्ड को कंट्रोल करना
GameActivity
, यूज़र इंटरफ़ेस (यूआई) पर सॉफ़्ट कीबोर्ड को कंट्रोल करने के लिए दो फ़ंक्शन उपलब्ध कराता है:
GameActivity_showSoftInput()
सॉफ़्ट कीबोर्ड दिखाता है.GameActivity_hideSoftInput()
सॉफ़्ट कीबोर्ड को छिपाता है.
इनकी परिभाषाओं के लिए, एपीआई के रेफ़रंस दस्तावेज़ देखें. कीबोर्ड दिखने के बाद, ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) कुछ ऐसा दिख सकता है:
देखें कि टेक्स्ट उपलब्ध है या नहीं
सॉफ़्ट कीबोर्ड इवेंट, JNI के ज़रिए Java से C/C++ में पास किए जाते हैं. इसके बाद, ये GameActivity के रैपर तक पहुंचते हैं. आखिर में, ये native_app_glue
में लागू किए गए android_app::textInputState
फ़्लैग में दिखते हैं.GameTextInput
ऐप्लिकेशन को इस फ़्लैग को समय-समय पर पोल करना चाहिए, ताकि ज़रूरी प्रोसेसिंग की जा सके:
- GameActivity सिर्फ़
android_app::textInputState
फ़्लैग सेट करता है. - ऐप्लिकेशन, फ़्लैग को पोल करते हैं और नए
GameTextInput
इवेंट को हैंडल करते हैं. जैसे, इनपुट बफ़र में जोड़ा गया नया टेक्स्ट. - ऐप्लिकेशन
android_app::textInputState
को मिटा देते हैं.
ध्यान दें कि android_app::textInputState
, सिंगल और मल्टीपल टेक्स्ट इनपुट इवेंट के बीच अंतर नहीं करता है.
एक सामान्य उदाहरण के लिए, यहां दिया गया कोड ऐप्लिकेशन साइकल कमांड, टच इवेंट, और मुख्य इवेंट को हैंडल करने के बाद, textInputState
फ़्लैग को पोल करता है:
while (true) {
// Read all pending events.
int events;
struct android_poll_source* source;
while ((ALooper_pollOnce(engine.animating ? 0 : -1, nullptr, &events,
(void**)&source)) >= 0) {
// Process this event, etc.
...
// Check if we are exiting.
if (app->destroyRequested != 0) {
engine_term_display(&engine);
return;
}
}
engine_handle_input(app);
// Process text input events if there is any outstanding.
if (app->textInputState) {
// process TextInput events.
...
//reset the textInputState flag
app->textInputState = 0;
}
if (engine.animating) {
// draw frames.
}
}
उपयोगकर्ता के इनपुट किए गए टेक्स्ट को वापस पाना
इनपुट किए गए टेक्स्ट और अन्य स्थितियां, GameTextInput के इंटरनल बफ़र GameTextInput::currentState_
में सेव होती हैं. ऐप्लिकेशन, अपना कॉन्टेंट वापस पाने के लिए इनमें से किसी एक तरीके का इस्तेमाल कर सकते हैं:
- GameActivity का रैपर एपीआई (सुझाया गया)
- GameTextInput API
GameActivity API की मदद से, TextInput की स्थिति पाना
ऐप्लिकेशन, सामान्य कॉलबैक मैकेनिज़्म की मदद से मौजूदा टेक्स्ट इनपुट हासिल करते हैं:
- टेक्स्ट इनपुट इवेंट को प्रोसेस करने के लिए,
GameTextInputGetStateCallback
टाइप का कॉलबैक फ़ंक्शन लागू करें. - जब एक या एक से ज़्यादा इवेंट पूरे नहीं हुए हों, तब
GameActivity_getInputState()
पर कॉल करें. - इवेंट प्रोसेस होने के बाद,
android_app::textInputState
को मिटा दें.
पिछले सेक्शन में दिए गए स्निपेट का इस्तेमाल करके, यहां दिया गया कोड टेक्स्ट इनपुट बफ़र का रेफ़रंस हासिल करता है, उसे प्रोसेस करता है (दिखाया नहीं गया है), और इवेंट फ़्लैग को रीसेट करता है:
extern "C" void GameTextInputGetStateCB(void *ctx, const struct GameTextInputState *state) {
auto* engine = (struct engine*)ctx;
if (!engine || !state) return;
// Process the text event(s).
LOGI("UserInputText: %s", state->text_UTF8);
// Clear the text input flag.
engine->app->textInputState = 0;
}
पिछले सेक्शन में दिखाए गए गेम लूप में, ऊपर दिए गए टेक्स्ट इनपुट हैंडलर का इस्तेमाल करके टेक्स्ट की जांच करें और उसे प्रोसेस करें:
if (state->textInputState) {
GameActivity_getTextInputState(
app->activity,
GameTextInputGetStateCB, // App's event handler shown above.
&engine // Context to the GameTextInputGetStateCB function.
);
}
ऐप्लिकेशन, GameActivity_setTextInputState()
का इस्तेमाल करके, GameTextInputState
कॉन्टेंट को शुरू कर सकते हैं. हालांकि, ऐसा करना ज़रूरी नहीं है.
GameTextInput API की मदद से, TextInput की स्थिति पाना
ऐप्लिकेशन, मौजूदा GameTextInputState
को पाने के लिए सीधे GameTextInput
API का इस्तेमाल भी कर सकते हैं:
- GameActivity का इंटरनल
GameTextInput
इंस्टेंस पाने के लिए,GameActivity_getTextInput()
का इस्तेमाल करें. GameTextInput
इंस्टेंस का इस्तेमाल करके,GameTextInput_getState()
को कॉल करें, ताकि आपको वहीGameTextInputState
कॉन्टेंट मिल सके.
फिर से ध्यान दें कि ऐप्लिकेशन को GameTextInput
को सीधे तौर पर शुरू नहीं करना चाहिए; GameActivity
पहले से ही शुरू होने की प्रोसेस के दौरान ऐसा करता है.
कॉलबैक का तरीका, GameActivity के GameActivity_getTextInputState()
फ़ंक्शन के लिए इस्तेमाल किए गए तरीके जैसा ही होता है.
रेफ़रंस
GameActivity
ऐप्लिकेशन बनाते समय, डेवलपर को इन संसाधनों से मदद मिल सकती है:
- GameActivity का इस्तेमाल शुरू करना
- GameTextInput के उपयोगकर्ता के लिए दस्तावेज़
- agdkTunnel sample
- GameActivity के लिए Jetpack का रेफ़रंस दस्तावेज़
- GameTextInput के लिए Jetpack का रेफ़रंस दस्तावेज़
- AGDK का सोर्स कोड
सुझाव/राय दें या शिकायत करें
GameActivity और GameTextInput, दोनों Jetpack games library का हिस्सा हैं. किसी भी समस्या या सवाल के लिए, Google IssueTracker पर गड़बड़ी की जानकारी दें.