GameActivity'de Metin Girişi Android Oyun Geliştirme Kiti'nin bir parçasıdır.

GameActivity, GameTextInput,:

  • 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:

alternatif_metin

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:

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:

alternatif_metin

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:

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:

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.