GameTextInput Część pakietu Android Game Development Kit.
Biblioteka GameTextInput
to prostsza alternatywa dla pisania pełnoekranowej aplikacji na Androida, która do wprowadzania tekstu korzysta z klawiatury programowej.
GameTextInput
ma prosty interfejs API, który umożliwia wyświetlanie i ukrywanie klawiatury programowej, ustawianie lub odbieranie aktualnie edytowanego tekstu oraz otrzymywanie powiadomień o zmienionych tekstach. Nie jest ona przeznaczona dla w pełni funkcjonalnych aplikacji do edycji tekstu, ale zapewnia obsługę wyboru i tworzenia regionu w typowych przypadkach użycia w grach. Ta biblioteka obsługuje również zaawansowane funkcje edytora metod wprowadzania, takie jak sprawdzanie pisowni, uzupełnienia i znaki z wieloma kluczami.
GameTextInput
gromadzi tekst wejściowy (wraz z odpowiednimi stanami) w wewnętrznym buforze GameTextInput::currentState_
i powiadamia aplikację o wszelkich zmianach. Aplikacja przetwarza tekst za pomocą zarejestrowanej funkcji wywołania zwrotnego.
Dostępność
GameTextInput
mogą być używane na następujące sposoby:
Wspólnie z platformą GameActivity: GameActivity integruje funkcję GameTextInput. Aplikacje, które używają GameActivity, mogą korzystać tylko ze zintegrowanego interfejsu GameTextInput. Instrukcje dotyczące użytkowania są dokładnie udokumentowane na stronie GameActivity . Przykład integracji usług GameActivity i GameTextInput znajdziesz w repozytorium Games-samples. Ten model użytkowania nie należy do zakresu tego przewodnika.
Jako samodzielna biblioteka – w dalszej części przewodnika znajdziesz opis czynności związanych z korzystaniem z aplikacji.
Pamiętaj, że powyższe dwie metody wzajemnie się wykluczają.
Formalne premiery GameTextInput
są dostępne na tych kanałach:
- Wprowadzenie biblioteki gier Jetpack w aplikacji Google Maven
- Informacje o wersjach pliku ZIP na stronie pobierania AGDK
Ten przewodnik dotyczy pierwszego przypadku użycia. Zwalnianie każdego pliku ZIP można znaleźć w instrukcjach dołączonych do opakowania.
Konfigurowanie kompilacji
Aplikacja GameTextInput
jest rozpowszechniana jako archiwum Androida (AAR). To AAR zawiera klasy Java i kod źródłowy C, który implementuje natywne funkcje usługi GameTextInput
. Musisz uwzględnić te pliki źródłowe w ramach procesu kompilacji w Prefab
, co spowoduje udostępnienie bibliotek natywnych i kodu źródłowego w projekcie CMake lub kompilacji NDK.
Postępuj zgodnie z instrukcjami na stronie Gry Jetpack na Androida, aby dodać zależność biblioteki
GameTextInput
do plikubuild.gradle
gry. Pamiętaj, że jeśli Twoje aplikacje używają GameActivity, nie mogą używać samodzielnej bibliotekiGameTextInput
.Upewnij się, że
gradle.properties
zawiera te wiersze:# Tell Android Studio we are using AndroidX. android.useAndroidX=true # Use Prefab 1.1.2 or higher, which contains a fix for "header only" libs. android.prefabVersion=1.1.2 # Required only if you're using Android Studio 4.0 (4.1 is recommended). # android.enablePrefab=true
Zaimportuj pakiet
game-text-input
i dodaj go do miejsca docelowego w plikuCMakeLists.txt
projektu:find_package(game-text-input REQUIRED CONFIG) ... target_link_libraries(... game-text-input::game-text-input)
W jednym z plików
.cpp
w grze dodaj ten wiersz, aby uwzględnić implementacjęGameTextInput
:#include <game-text-input/gametextinput.cpp>
W plikach źródłowych korzystających z interfejsu
GameTextInput
C API uwzględnij plik nagłówka:#include <game-text-input/gametextinput.h>
Skompiluj i uruchom aplikację. Jeśli wystąpią błędy CMake, sprawdź, czy pliki AAR i
build.gradle
są prawidłowo skonfigurowane. Jeśli nie możesz znaleźć pliku#include
, sprawdź plik konfiguracjiCMakeLists.txt
.
Zintegruj swoją kompilację
Z wątku C, który jest już dołączony do JVM, lub z głównego wątku aplikacji, wywołaj metodę
GameTextInput_init
ze wskaźnikiemJNIEnv
.static GameTextInput* gameTextInput = nullptr; extern "C" JNIEXPORT void JNICALL Java_com_gametextinput_testbed_MainActivity_onCreated(JNIEnv* env, jobject this) { { if(!gameTextInput) gameTextInput = GameTextInput_init(env); ... }
Utwórz klasę Java
InputEnabledTextView
z dostępem doInputConnection
.public class InputEnabledTextView extends View implements Listener { public InputConnection mInputConnection; public InputEnabledTextView(Context context, AttributeSet attrs) { super(context, attrs); } public InputEnabledTextView(Context context) { super(context); } public void createInputConnection(int inputType) { EditorInfo editorInfo = new EditorInfo(); editorInfo.inputType = inputType; editorInfo.actionId = IME_ACTION_NONE; editorInfo.imeOptions = IME_FLAG_NO_FULLSCREEN; mInputConnection = new InputConnection(this.getContext(), this, new Settings(editorInfo, true) ).setListener(this); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { if (outAttrs != null) { GameTextInput.copyEditorInfo(mInputConnection.getEditorInfo(), outAttrs); } return mInputConnection; } // Called when the IME input changes. @Override public void stateChanged(State newState, boolean dismissed) { onTextInputEventNative(newState); } @Override public void onImeInsetsChanged(Insets insets) { // handle Inset changes here } private native void onTextInputEventNative(State softKeyboardEvent); }
Dodaj utworzony element
InputEnabledTextView
do układu interfejsu. Na przykład ten kod w funkcjiactivity_main.xml
może umieścić go u dołu ekranu:<com.android.example.gametextinputjava.InputEnabledTextView android:id="@+id/input_enabled_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
Pobierz tę nową klasę
InputEnabledTextView
do aktywności w Javie. Gdy używasz powiązania widoku danych, jest to stosunkowo proste:public class MainActivity extends AppCompatActivity { ... private ActivityMainBinding binding; private InputEnabledTextView inputEnabledTextView; private native void setInputConnectionNative(InputConnection c); @Override protected void onCreate(Bundle savedInstanceState) { ... binding = ActivityMainBinding.inflate(getLayoutInflater()); inputEnabledTextView = binding.inputEnabledTextView; inputEnabledTextView.createInputConnection(InputType.TYPE_CLASS_TEXT); setInputConnectionNative(inputEnabledTextView.mInputConnection); }
W bibliotece C przekaż kod
inputConnection
do zajęćGameTextInput_setInputConnection
. Przekaż wywołanie zwrotne w komponencieGameTextInput_setEventCallback
, aby otrzymać powiadomienie o zdarzeniach w formie structGameTextInputState
stanu C.extern "C"JNIEXPORT void JNICALL Java_com_gametextinput_testbed_MainActivity_setInputConnectionNative( JNIEnv *env, jobject this, jobject inputConnection) { GameTextInput_setInputConnection(gameTextInput, inputConnection); GameTextInput_setEventCallback(gameTextInput,[](void *ctx, const GameTexgtInputState *state) { if (!env || !state) return; // process the newly arrived text input from user. __android_log_print(ANDROID_LOG_INFO, "TheGreateGameTextInput", state->text_UTF8); }, env); }
W bibliotece C wywołaj metodę
GameTextInput_processEvent
, która wewnętrznie wywoła wywołanie zwrotne zarejestrowane w poprzednim kroku, aby aplikacja obsługiwała zdarzenia w przypadku zmiany stanu.extern "C" JNIEXPORT void JNICALL Java_com_gametextinput_testbed_InputEnabledTextView_onTextInputEventNative( JNIEnv* env, jobject this, jobject soft_keyboard_event) { GameTextInput_processEvent(gameTextInput, soft_keyboard_event); }
Funkcje użytkowe
Biblioteka GameTextInput
zawiera funkcje narzędziowe, które umożliwiają konwertowanie obiektów stanu Java i struktur stanu C. uzyskać dostęp do funkcji wyświetlania i ukrywania IME za pomocą funkcji GameTextInput_showIme
i GameTextInput_hideIme
.
Pliki referencyjne
Poniższe informacje mogą być przydatne dla deweloperów podczas tworzenia aplikacji za pomocą GameTextInput
:
- Aplikacja testowa GameTextInput
- Używanie GameTextInput z GameActivity
- Dokument z informacjami o GameTextInput
- Kod źródłowy GameTextInput
Opinia
W przypadku problemów i pytań związanych z usługą GameTextInput
utwórz błąd w narzędziu Google IssueTracker.