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:
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:
GameActivity_showSoftInput()
visualizza la tastiera su schermo.GameActivity_hideSoftInput()
nasconde la tastiera su schermo.
Per le relative definizioni, consulta la documentazione di riferimento delle API. Dopo il , l'interfaccia utente dell'applicazione potrebbe essere simile alla seguente:
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:
- Implementa una funzione di callback di tipo
GameTextInputGetStateCallback
per elaborare gli eventi di input di testo. - Chiama
GameActivity_getInputState()
quando sono presenti uno o più eventi in sospeso. - Cancella
android_app::textInputState
dopo l'elaborazione degli eventi.
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
:
- Utilizza
GameActivity_getTextInput()
per ottenere l'istanzaGameTextInput
interna di GameActivity. - Con l'istanza
GameTextInput
in mano, chiamaGameTextInput_getState()
per ricevere gli stessi contenutiGameTextInputState
.
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:
- Inizia ad Attività di gioco
- Documentazione utente di GameTextInput
- Esempio di agdkTunnel
- Documentazione di riferimento di Jetpack per GameActivity
- Documentazione di riferimento di Jetpack per GameTextInput
- Codice sorgente AGDK
Feedback
GameActivity e GameTextInput fanno entrambi parte della raccolta di giochi Jetpack. Per qualsiasi problemi e domande, crea un bug in Google IssueTracker.