Pole do wpisania tekstu gry Zawiera Android Game Development Kit.
Korzystanie z biblioteki GameTextInput
prostszą alternatywę dla pełnoekranowych aplikacji na Androida, które wykorzystują
klawiatura do wprowadzania tekstu.
GameTextInput
udostępnia prosty interfejs API do wyświetlania lub ukrywania funkcji
klawiaturę, ustawić lub pobrać aktualnie edytowany tekst oraz otrzymywać powiadomienia, gdy
tekst zostanie zmieniony. Nie dotyczy to w pełni funkcjonalnych aplikacji edytorów tekstu, ale
nadal zapewnia obsługę wyboru i tworzenia regionu w typowych przypadkach użycia
gry. Ta biblioteka obsługuje również zaawansowany edytor metod wprowadzania tekstu
(IME), takie jak sprawdzanie pisowni
sprawdzanie, uzupełnienia i znaki wieloklawiszowe.
Wewnętrznie funkcja GameTextInput
gromadzi tekst wejściowy (wraz z parametrem
odpowiednie stany) do bufora wewnętrznego GameTextInput::currentState_
oraz powiadamia o tym
i wszelkie wprowadzone w niej zmiany. Następnie aplikacja przetwarza tekst
zarejestrowana funkcja wywołania zwrotnego.
Dostępność
Z usługi GameTextInput
można korzystać na następujące sposoby:
Razem z funkcją GameActivity: GameActivity integruje funkcję GameTextInput. Aplikacje, które używają GameActivity, mogą używać tylko zintegrowanego GameTextInput. Instrukcje użytkowania są w pełni udokumentowane stronie GameActivity . Dla przykładowej integracji GameActivity i GameTextInput, zapoznaj się z games-samples. Ten model wykorzystania to nie są objęte tym przewodnikiem.
Jako samodzielna biblioteka: w dalszej części tego przewodnika znajdziesz opis poszczególnych czynności.
Pamiętaj, że te 2 metody wzajemnie się wykluczają.
Formalne wydania GameTextInput
są dostępne na tych kanałach:
- Udostępnienie biblioteki gier Jetpack w Google Maven
- Wersje plików ZIP na stronie pobierania AGDK
Ten przewodnik dotyczy pierwszego przypadku użycia. Aby użyć wersji pliku ZIP: zapoznaj się z instrukcjami wysłanymi w pakiecie.
Konfigurowanie kompilacji
Aplikacja GameTextInput
jest rozpowszechniana jako archiwum Androida (AAR). Ten plik AAR zawiera klasy Java i
kodu źródłowego C, który implementuje natywne funkcje interfejsu GameTextInput
. Ty
muszą uwzględnić te pliki źródłowe w procesie kompilacji za pomocą
Prefab
który udostępnia biblioteki natywne i kod źródłowy w projekcie CMake lub kompilacji NDK.
Postępuj zgodnie z instrukcjami na Jetpack Android Games, aby dodać zależność biblioteki
GameTextInput
od plikubuild.gradle
gry. Notatka że aplikacje używające GameActivity, nie mogą używać parametru samodzielną bibliotekęGameTextInput
.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 plikCMakeLists.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ć implementacjaGameTextInput
:#include <game-text-input/gametextinput.cpp>
W plikach źródłowych, które korzystają z interfejsu
GameTextInput
C API, uwzględnij nagłówek plik:#include <game-text-input/gametextinput.h>
skompilować i uruchomić aplikację; Jeśli występują błędy CMake, zweryfikuj atrybuty AAR i Pliki usługi
build.gradle
są prawidłowo skonfigurowane. Jeśli plik#include
to nie znaleziono. Sprawdź plik konfiguracyjnyCMakeLists.txt
.
Zintegruj kompilację
Z wątku C, który jest już dołączony do maszyny JVM, lub z głównego wątku aplikacji. thread, wywołaj
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 parametr ten kod wactivity_main.xml
może umieścić go na dole argumentu Ekran:<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. To jest względnie proste w przypadku użycia funkcji View Binding (Powiązanie widoków):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ż
inputConnection
doGameTextInput_setInputConnection
Przekaż oddzwonienie zaGameTextInput_setEventCallback
aby otrzymywać powiadomienia o zdarzeniach jako struktura stanu CGameTextInputState
.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 polecenie
GameTextInput_processEvent
, który wywołuje wewnętrzne wywołanie zwrotne zarejestrowane w poprzednim kroku, dla do obsługi zdarzeń 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 użytkowe, które umożliwiają konwertowanie
między obiektami stanu Java a strukturami stanów C. Dostęp do funkcji wyświetlania
i ukrywanie IME za pomocą narzędzia GameTextInput_showIme
i GameTextInput_hideIme
funkcji.
Pliki referencyjne
Podczas tworzenia aplikacji za pomocą funkcji
GameTextInput
:
- Aplikacja testowa GameTextInput
- Używanie GameTextInput z funkcją GameActivity
- Dokument referencyjny GameTextInput
- Kod źródłowy GameTextInput
Opinia
W przypadku problemów i pytań dotyczących usługi GameTextInput
utwórz
błąd w narzędziu Google IssueTracker.