GameActivity'de TextInput Android Game Development Kit'in bir parçasıdır.
GameActivity, GameTextInput'u aşağıdaki şekilde entegre eder:
- sarmalayıcı
- yeni metin girişi etkinliği kullanılabilirliği için işaret oluşturma
- metin içeriği için GameTextInput’un durum arabelleğini kullanarak doğrudan
Aşağıdaki şemada gösterildiği gibi uygulamalar, kullanıcının metin girişi yapmak için farklı dahili mantıksal bileşenler kullanır:
Yerleşik GameTextInput
kitaplığını kullanmak için üç 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ş metni ve durumları alınıyor
Bu belgenin geri kalanında bunlar ayrıntılı olarak açıklanmaktadır. GameActivity
uygulamasının kullanıldığı bir GameTextInput
örneği için oyun-örnekleri deposuna bakın.
Kullanıcı arayüzünde sanal klavyeyi kontrol et
GameActivity
, kullanıcı arayüzündeki yazılım klavyesini kontrol etmek için iki işlev sağlar:
GameActivity_showSoftInput()
yazılım klavyesini görüntüler.GameActivity_hideSoftInput()
yazılım klavyesini gizler.
Tanımları için API referans belgelerine bakın. Klavye görüntülendikten sonra, uygulamanın kullanıcı arayüzü aşağıdakine benzer görünebilir:
Metin kullanılabilirliğini kontrol edin
Soft klavye etkinlikleri, JNI üzerinden Java tarafında GameTextInput
konumundan 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, amaçlanan 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, işareti yoklar ve giriş arabelleğine eklenen yeni metin gibi yeni
GameTextInput
etkinliklerini işler. - Uygulamalar
android_app::textInputState
öğesini temizler.
android_app::textInputState
işlevinin tek ve çoklu metin girişi 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 GameTextInput::currentState_
dahili arabelleğinde toplanır. Uygulamalar, içeriklerini almak için aşağıdaki yöntemlerden birini kullanabilir:
- GameActivity’nin sarmalayıcı API'si (önerilir)
- GameTextInput API'si
GameActivity API ile TextInput durumu alma
Uygulamalar geçerli metin girişini tipik geri çağırma mekanizmasıyla alır:
- Metin girişi 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()
numaralı telefonu arayın. - Etkinlikler işlendikten sonra
android_app::textInputState
bölümünü temizleyin.
Önceki bölümdeki snippet'le devam ettiğimizde, aşağıdaki kod metin girişi arabelleğine bir referans alır, bunu işler (gösterilmez) 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 işleyici ile 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
öğesini almak için doğrudan GameTextInput
API'yi de kullanabilir:
- GameActivity'nin dahili
GameTextInput
örneğini almak içinGameActivity_getTextInput()
kullanın. GameTextInput
örneği elinizdeyken aynıGameTextInputState
içeriğini almak içinGameTextInput_getState()
yöntemini çağırın.
Uygulamaların GameTextInput
öğesini doğrudan başlatmaması gerektiğini tekrar hatırlatmak isteriz. GameActivity
bunu zaten başlatma işlemi sırasında 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'yi kullanmaya 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 sorunlar ve sorularınız için Google IssueTracker'da hata kaydı oluşturun.