Inserimento testo in GameActivity Parte del Android Game Development Kit.

Integrazione di GameActivity GameTextInput di:

  • fornendo un wrapper
  • creazione di un flag per la disponibilità di un nuovo evento di input di testo
  • direttamente utilizzando il buffer di stato di GameTextInput per i contenuti di testo

Come mostrato nel diagramma seguente, le applicazioni utilizzano logiche interne diverse componenti ai fini dell'input di testo dell'utente:

testo_alt

L'utilizzo della libreria GameTextInput integrata prevede tre passaggi generali:

  • Controllo della tastiera su schermo nell'UI
  • Sapere quando è disponibile nuovo testo
  • Recupero del testo inserito dall'utente e dei relativi stati

Nella parte restante del documento vengono descritti in dettaglio. Ad esempio, GameTextInput con GameActivity in azione, scopri di più Repository di esempi di giochi.

Controlla la tastiera su schermo nell'interfaccia utente

GameActivity offre due funzioni per controllare la tastiera su schermo nell'interfaccia utente:

Per le relative definizioni, consulta la documentazione di riferimento delle API. Dopo il , l'interfaccia utente dell'applicazione potrebbe essere simile alla seguente:

testo_alt

Verificare la disponibilità del testo

Gli eventi della tastiera virtuale vengono passati da GameTextInput sul lato Java al Il lato C/C++ passa attraverso la JNI, quindi viaggia verso il wrapper di GameActivity, che riflette la bandiera android_app::textInputState implementato in native_app_glue. Applicazioni deve eseguire periodicamente il polling di questo flag per eseguire l'elaborazione prevista:

  • GameActivity imposta solo il flag android_app::textInputState.
  • Le applicazioni inviano un sondaggio al flag e gestiscono i nuovi eventi GameTextInput, come il nuovo testo aggiunto al buffer di input.
  • Le applicazioni cancellano android_app::textInputState.

Tieni presente che android_app::textInputState non fa distinzione tra singoli e più eventi di input di testo.

Come semplice esempio, il seguente codice esegue il polling del flag textInputState dopo gestione di comandi ciclo dell'app, eventi tocco ed eventi chiave:

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.
   }
}

Recupera il testo inserito dall'utente

I testi di input e gli altri stati vengono accumulati nel campo GameTextInput buffer interno, GameTextInput::currentState_. Applicazioni può utilizzare uno dei seguenti modi per recuperarne i contenuti:

  • API wrapper di GameActivity (consigliato)
  • API GameTextInput

Ottieni lo stato TextInput con l'API GameActivity

Le applicazioni acquisiscono l'input di testo corrente con il tipico meccanismo di callback:

Continuando con lo snippet nella sezione precedente, il seguente codice acquisisce un riferimento al buffer di input di testo, lo elabora (non mostrato) e reimposta il flag dell'evento:

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;
}

Nel ciclo di gioco mostrato nella sezione precedente, controlla ed elabora il testo con il gestore di input di testo riportato sopra:

if (state->textInputState) {
    GameActivity_getTextInputState(
        app->activity,
        GameTextInputGetStateCB,  // App's event handler shown above.
        &engine // Context to the GameTextInputGetStateCB function.
    );
}

Le applicazioni possono facoltativamente inizializzare i contenuti GameTextInputState con GameActivity_setTextInputState()

Ottieni lo stato TextInput con l'API GameTextInput

Le applicazioni possono anche utilizzare direttamente l'API GameTextInput per recuperare lo stato attuale GameTextInputState:

Anche in questo caso, tieni presente che le applicazioni non devono inizializzare GameTextInput direttamente; GameActivity svolge già questa operazione durante il processo di inizializzazione.

Il meccanismo di callback è lo stesso utilizzato dal parametro GameActivity Funzione GameActivity_getTextInputState().

Riferimenti

Gli sviluppatori potrebbero trovare utili le seguenti risorse durante la creazione GameActivity applicazione:

Feedback

GameActivity e GameTextInput fanno entrambi parte della raccolta di giochi Jetpack. Per qualsiasi problemi e domande, crea un bug in Google IssueTracker.