TextInput in GameActivity Teil des Android Game Development Kit.
GameActivity-Integration GameTextInput von:
- einen Wrapper bereitstellen,
- Erstellen eines Flags für die Verfügbarkeit neuer Texteingabeereignisse
- direkt über den Statuspuffer von GameTextInput für den Textinhalt
Wie im folgenden Diagramm dargestellt, verwenden Anwendungen verschiedene interne logische Komponenten für die Texteingabe durch den Nutzer:
Zur Verwendung der integrierten GameTextInput
-Bibliothek sind drei grundlegende Schritte erforderlich:
- Soft Keyboard auf der Benutzeroberfläche steuern
- Wissen, wenn neuer Text verfügbar ist
- Nutzereingabetext und zugehörige Status abrufen
Im weiteren Verlauf dieses Dokuments werden sie ausführlich beschrieben. Ein Beispiel für
GameTextInput
mit GameActivity
in Aktion – siehe
Repository „Games-Beispiele“.
Softtastatur auf der Benutzeroberfläche steuern
GameActivity
bietet zwei Funktionen zum Steuern der Bildschirmtastatur auf der Benutzeroberfläche:
GameActivity_showSoftInput()
zeigt die Bildschirmtastatur an.GameActivity_hideSoftInput()
blendet die Bildschirmtastatur aus.
Die Definitionen finden Sie in der API-Referenzdokumentation. Nach dem angezeigt wird, sieht die Benutzeroberfläche der Anwendung etwa so aus:
Textverfügbarkeit prüfen
Ereignisse vom Typ „Soft Keyboard“ werden von GameTextInput
auf der Java-Seite an den
durch die JNI, gelangen dann zum Wrapper von GameActivity
wird in Flag android_app::textInputState
widergespiegelt
in native_app_glue
implementiert. Anwendungen
sollte dieses Flag regelmäßig abfragen, um die gewünschte Verarbeitung durchzuführen:
- GameActivity legt nur das Flag
android_app::textInputState
fest. - Anwendungen fragen das Flag ab und verarbeiten die neuen
GameTextInput
-Ereignisse. z. B. den neuen Text, der dem Eingabepuffer hinzugefügt wurde. - Anwendungen löschen den
android_app::textInputState
.
android_app::textInputState
unterscheidet nicht zwischen einzelnen
und mehrere Texteingabeereignisse.
In einem einfachen Beispiel fragt der folgende Code das Flag textInputState
nach dem
App-Zyklusbefehle, Touch-Ereignisse und Schlüsselereignisse verarbeiten:
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.
}
}
Nutzereingabetext abrufen
Die Eingabetexte und andere Zustände werden im Feld
interner Zwischenspeicher GameTextInput::currentState_
. Anwendungen
können Sie den Inhalt auf eine der folgenden Arten abrufen:
- Wrapper API von GameActivity (empfohlen)
- GameTextInput API
TextInput-Status mit der GameActivity API abrufen
Anwendungen rufen die aktuelle Texteingabe mit dem typischen Callback-Mechanismus ab:
- Implementieren Sie eine Callback-Funktion vom Typ
GameTextInputGetStateCallback
, um Texteingabeereignisse zu verarbeiten. GameActivity_getInputState()
aufrufen, wenn mindestens eins vorhanden ist für wichtige Ereignisse.- Löschen Sie den Eintrag
android_app::textInputState
. nachdem die Ereignisse verarbeitet wurden.
Wir bleiben mit dem Snippet aus dem vorherigen Abschnitt ruft einen Verweis auf den Texteingabepuffer ab, verarbeitet ihn (nicht abgebildet) und setzt das Ereignis-Flag zurück:
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;
}
Text in der im vorherigen Abschnitt gezeigten Spielschleife prüfen und verarbeiten mit dem obigen Texteingabe-Handler:
if (state->textInputState) {
GameActivity_getTextInputState(
app->activity,
GameTextInputGetStateCB, // App's event handler shown above.
&engine // Context to the GameTextInputGetStateCB function.
);
}
Anwendungen können den GameTextInputState
-Inhalt optional mit folgendem Befehl initialisieren:
GameActivity_setTextInputState()
TextInput-Status mit der GameTextInput API abrufen
Anwendungen können die GameTextInput
API auch direkt verwenden, um den aktuellen
GameTextInputState
:
GameActivity_getTextInput()
verwenden um die interneGameTextInput
-Instanz von GameActivity abzurufen.- Rufen Sie mit der
GameTextInput
-InstanzGameTextInput_getState()
auf, um dieselbenGameTextInputState
-Inhalte zu erhalten.
Anwendungen sollten GameTextInput
nicht initialisieren
direkt; GameActivity
tut dies bereits während des Initialisierungsprozesses.
Der Callback-Mechanismus ist derselbe wie der vom GameActivity-Element
GameActivity_getTextInputState()
.
Referenzen
Für Entwickler könnten die folgenden Ressourcen hilfreich sein, wenn Sie
GameActivity
-Apps:
- GameActivity – Erste Schritte
- GameTextInput-Nutzerdokumentation
- agdkTunnel-Beispiel
- Jetpack-Referenzdokumentation für GameActivity
- Jetpack-Referenzdokumentation für GameTextInput
- AGDK-Quellcode
Feedback
GameActivity und GameTextInput sind Teil der Jetpack-Spielebibliothek. Für alle Probleme und Fragen haben, erstellen Sie einen Fehler im Google IssueTracker.