GameActivity'de Metin Girişi Android Oyun Geliştirme Kiti'nin bir parçasıdır.
- sarmalayıcı sağlayarak
- yeni metin girişi etkinlik uygunluğu için bir işaret oluşturuluyor
- metin içeriği için GameTextInput'un durum arabelleğini doğrudan kullanarak
Aşağıdaki şemada gösterildiği gibi, uygulamalar farklı dahili mantıksal kullanıcı metni giriş amacı için bileşenler:
Yerleşik GameTextInput
kitaplığının kullanımı geniş kapsamlı üç adımdan oluşur:
- Kullanıcı arayüzünde sanal klavyeyi kontrol etme
- Yeni metnin ne zaman kullanıma sunulduğunu öğrenme
- Kullanıcı girişi metnini ve durumlarını alma
Bu dokümanın geri kalanında bunlar ayrıntılı olarak açıklanmaktadır. Örnek olarak
GameActivity
iş başında GameTextInput
, bkz.
oyun örnekleri deposu.
Kullanıcı arayüzünde sanal klavyeyi kontrol et
GameActivity
, kullanıcı arayüzündeki ekran klavyesini kontrol etmek için iki işlev sağlar:
GameActivity_showSoftInput()
klavyeyi görüntüler.GameActivity_hideSoftInput()
klavyeyi gizler.
Tanımları için API referans belgelerine bakın. görüntülendiğinde, uygulamanın kullanıcı arayüzü aşağıdakine benzer şekilde görünebilir:
Kısa mesaj kullanılabilirliğini kontrol edin
Soft klavye etkinlikleri, Java tarafında GameTextInput
kaynağından
C/C++ tarafında JNI'dan devam edin, ardından GameActivity'nin sarmalayıcısına gidin ve son olarak
android_app::textInputState
işaretinde gösterilir
native_app_glue
tarihinde uygulandı. Uygulamalar
istenen işlemeyi gerçekleştirmek için bu işareti düzenli aralıklarla yoklamalıdır:
- GameActivity yalnızca
android_app::textInputState
işaretini ayarlıyor. - Uygulamalar bayrağı yoklar ve yeni
GameTextInput
etkinliklerini işler, giriş arabelleğine eklenen yeni metin gibi. - Uygulamalarda
android_app::textInputState
şartları için izin verilmez.
android_app::textInputState
işlevinin tekli kimlikler arasında ayrım yapmadığını unutmayın.
ve birden fazla metin girişi etkinliği.
Basit bir örnek için aşağıdaki kodtextInputState
uygulama döngüsü komutlarını, dokunma etkinliklerini ve önemli etkinlikleri işleme:
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 dosyasında toplanır
dahili arabellek, GameTextInput::currentState_
. Uygulamalar
, içeriğini almak için aşağıdaki yöntemlerden birini kullanabilir:
- GameActivity'nin sarmalayıcı API'si (önerilir)
- GameTextInput API'sı
GameActivity API ile TextInput durumunu 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 olduğunda
GameActivity_getInputState()
numaralı telefonu ara bekleyen etkinliklerdir. android_app::textInputState
'nı temizleyin izlemesi gerekir.
Önceki bölümde verilen snippet ile devam edelim. Aşağıdaki kod metin girişi arabelleğine bir başvuru alır, onu 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 kontrol edip işleyin yukarıdaki metin giriş işleyicisiyle:
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()
GameTextInput API ile TextInput durumu alma
Uygulamalar ayrıca, geçerli bilgileri almak için GameTextInput
API'yi doğrudan kullanabilir.
GameTextInputState
:
GameActivity_getTextInput()
kullanın GameActivity'nin dahiliGameTextInput
örneğini almak için.GameTextInput
örneği hazır haldeyken, aynıGameTextInputState
içeriğini almak içinGameTextInput_getState()
çağrısı yapın.
Uygulamaların GameTextInput
öğesini başlatmaması gerektiğini unutmayın
doğrudan; GameActivity
başlatma işlemi sırasında bu işlemi zaten yapıyor.
Geri çağırma mekanizması, GameActivity'nin
GameActivity_getTextInputState()
işlevi.
Referanslar
Geliştiriciler
GameActivity
uygulama:
- Oyun Etkinliği'ne başlama
- GameTextInput kullanıcı dokümanları
- 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. Herhangi bir ve sorularınız varsa Google IssueTracker'da bir hata oluşturun.