GameActivity'deki TextInput Android Game Development Kit'in bir parçasıdır.
GameActivity, GameTextInput'u aşağıdaki şekilde entegre eder:
- sarmalayıcı verme
- yeni metin girişi etkinliğinin kullanılabilirliği için bir işaret oluşturma
- doğrudan metin içeriği için GameTextInput’un durum arabelleği kullanılarak
Aşağıdaki şemada gösterildiği gibi uygulamalar, kullanıcı metin girişi amacıyla farklı dahili mantıksal bileşenler kullanır:
Yerleşik GameTextInput
kitaplığını kullanmanın üç genel adımı vardır:
- Kullanıcı arayüzünde sanal klavyeyi kontrol etme
- Yeni metin kullanıma sunulduğunda haberdar olma
- Kullanıcı giriş metnini ve durumlarını alma
Bu belgenin geri kalanında bunlar ayrıntılı olarak açıklanmaktadır. GameActivity
uygulamasının kullanıldığı GameTextInput
örneğini görmek için games-samples deposuna göz atın.
Kullanıcı arayüzünde sanal klavyeyi kontrol et
GameActivity
, kullanıcı arayüzünde klavye klavyesini kontrol etmek için iki işlev sağlar:
GameActivity_showSoftInput()
yumuşak klavyeyi görüntüler.GameActivity_hideSoftInput()
yazılım klavyesini gizler.
Tanımlarını öğrenmek için API referans belgelerine bakın. Klavye görüntülendikten sonra, uygulamanın kullanıcı arayüzü aşağıdaki gibi görünebilir:
Metin kullanılabilirliğini kontrol edin
Elektronik klavye etkinlikleri, Java tarafındaki GameTextInput
noktasından JNI üzerinden C/C++ tarafına aktarılır, ardından GameActivity’nin sarmalayıcısına gider ve son olarak native_app_glue
öğesinde uygulanan android_app::textInputState
işaretini yansıtır. Uygulamalar, istenen işlemi gerçekleştirmek için bu işareti düzenli olarak yoklamalıdır:
- GameActivity yalnızca
android_app::textInputState
işaretini ayarlar. - Uygulamalar, bayrağı yoklar ve yeni
GameTextInput
etkinliklerini (ör. giriş arabelleğine eklenen yeni metin) işler. - Uygulamalar
android_app::textInputState
öğesini temizler.
android_app::textInputState
işlevinin tek ve çoklu metin giriş etkinliklerini birbirinden ayırt etmediğini unutmayın.
Basit bir örnek vermek gerekirse aşağıdaki kod, uygulama döngüsü komutlarını, dokunma etkinliklerini ve önemli etkinlikleri işledikten sonra textInputState
işaretini yoklar:
while (true) {
// Read all pending events.
int events;
struct android_poll_source* source;
while ((ALooper_pollAll(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.
}
}
Kullanıcı giriş metnini al
Giriş metinleri ve diğer durumlar GameTextInput’un dahili arabelleğinde (GameTextInput::currentState_
) toplanır. Uygulamalar, içeriklerini almak için aşağıdaki yöntemlerden birini kullanabilir:
- GameActivity’nin sarmalayıcı API'si (önerilen)
- GameTextInput API'sı
GameActivity API ile TextInput durumu alma
Uygulamalar, tipik geri çağırma mekanizmasıyla geçerli metin girişini alır:
- Metin giriş etkinliklerini işlemek için
GameTextInputGetStateCallback
türünde bir geri çağırma işlevi uygulayın. - Bir veya daha fazla bekleyen etkinlik olduğunda
GameActivity_getInputState()
işlevini çağırın. - Etkinlikler işlendikten sonra
android_app::textInputState
etiketini temizleyin.
Önceki bölümdeki snippet ile devam edelim. Aşağıdaki kod, metin girişi arabelleğine bir referans alır, bunu işler (gösterilmemiştir) ve etkinlik işaretini sıfırlar:
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;
}
Önceki bölümde gösterilen oyun döngüsünde, metni yukarıdaki metin giriş işleyicisiyle kontrol edin ve işleyin:
if (state->textInputState) {
GameActivity_getTextInputState(
app->activity,
GameTextInputGetStateCB, // App's event handler shown above.
&engine // Context to the GameTextInputGetStateCB function.
);
}
Uygulamalar isteğe bağlı olarak GameTextInputState
içeriğini GameActivity_setTextInputState()
ile başlatabilir.
GameTextInput API ile TextInput durumu alma
Uygulamalar, geçerli GameTextInputState
dosyasını almak için doğrudan GameTextInput
API'yi de kullanabilir:
- GameActivity'nin dahili
GameTextInput
örneğini almak içinGameActivity_getTextInput()
kodunu kullanın. GameTextInput
örneği elinizdeyken aynıGameTextInputState
içeriğini almak içinGameTextInput_getState()
yöntemini çağırın.
Aynı şekilde, uygulamaların GameTextInput
uygulamasını doğrudan başlatmaması gerektiğini unutmayın. GameActivity
bunu başlatma işlemi sırasında zaten yapar.
Geri çağırma mekanizması, GameActivity'nin GameActivity_getTextInputState()
işlevi tarafından kullanılanla aynıdır.
Referanslar
Geliştiriciler GameActivity
uygulamaları oluştururken aşağıdaki kaynaklardan yararlanabilir:
- GameActivity'ye başlama
- GameTextInput kullanıcı belgeleri
- agdkTunnel örneği
- GameActivity için Jetpack referans dokümanları
- GameTextInput için Jetpack referans dokümanları
- AGDK kaynak kodu
Geri bildirim
GameActivity ve GameTextInput, Jetpack oyun kitaplığının bir parçasıdır. Yaşadığınız sorun ve sorularınız için Google IssueTracker'da hata oluşturun.