GameTextInput Bagian dari Android Game Development Kit.
Menggunakan library GameTextInput adalah
cara lain yang lebih sederhana untuk menulis aplikasi Android layar penuh yang menggunakan keyboard
virtual untuk input teks.
GameTextInput menyediakan API yang mudah digunakan untuk menampilkan atau menyembunyikan keyboard
virtual, menetapkan atau mendapatkan teks yang saat ini sedang diedit, dan menerima notifikasi saat
teks diubah. Hal ini tidak dimaksudkan untuk aplikasi editor teks lengkap, tetapi
masih memberikan dukungan region pemilihan dan penulisan untuk kasus penggunaan umum dalam
game. Selain itu, library ini juga mendukung fitur editor metode input
(IME) lanjutan seperti pemeriksaan
ejaan, pelengkapan, dan karakter multi-kunci.
Secara internal, GameTextInput mengumpulkan teks input (bersama dengan
status yang relevan) ke buffer internal GameTextInput::currentState_ dan memberi tahu
aplikasi tentang perubahan apa pun di dalamnya. Kemudian, aplikasi melakukan pemrosesan teks di fungsi callback yang terdaftar.
Ketersediaan
GameTextInput dapat digunakan dengan cara berikut:
- Bersama dengan GameActivity: GameActivity mengintegrasikan GameTextInput. Aplikasi yang menggunakan GameActivity hanya dapat menggunakan GameTextInput terintegrasi. Petunjuk penggunaan didokumentasikan sepenuhnya di halaman GameActivity . Untuk contoh integrasi GameActivity dan GameTextInput, lihat repositori games-samples. Model penggunaan ini tidak termasuk dalam cakupan panduan ini. 
- Sebagai library mandiri: bagian panduan lainnya menjelaskan langkah-langkah penggunaan. 
Perhatikan bahwa kedua metode di atas tidak dapat terjadi bersamaan.
Rilis GameTextInput formal tersedia dalam rilis library game Jetpack di Google Maven.
Menyiapkan build
GameTextInput didistribusikan sebagai Android Archive (AAR). AAR ini berisi class Java dan
kode sumber C yang mengimplementasikan fitur native GameTextInput. Anda
harus menyertakan file sumber ini sebagai bagian dari proses build melalui
Prefab,
yang mengekspos library native dan kode sumber ke project CMake atau build NDK.
- Ikuti petunjuk di halaman Jetpack Android Games untuk menambahkan dependensi library - GameTextInputke file- build.gradlegame Anda. Perhatikan bahwa jika aplikasi Anda menggunakan GameActivity, aplikasi tersebut tidak dapat menggunakan library- GameTextInputmandiri.
- Pastikan - gradle.propertiesberisi baris berikut:- # 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
- Impor paket - game-text-inputdan tambahkan ke target Anda dalam file- CMakeLists.txtproject Anda:- find_package(game-text-input REQUIRED CONFIG) ... target_link_libraries(... game-text-input::game-text-input)
- Di salah satu file - .cppdi game Anda, tambahkan baris berikut untuk menyertakan penerapan- GameTextInput:- #include <game-text-input/gametextinput.cpp>
- Dalam file sumber yang menggunakan - GameTextInputC API, sertakan file header:- #include <game-text-input/gametextinput.h>
- Mengompilasi dan menjalankan aplikasi. Jika Anda memiliki error CMake, verifikasi file AAR dan - build.gradleyang telah disiapkan dengan benar. Jika file- #includetidak ditemukan, verifikasi file konfigurasi- CMakeLists.txtAnda.
Mengintegrasikan build
- Dari thread C yang sudah terlampir ke JVM, atau thread utama aplikasi, panggil - GameTextInput_initdengan pointer- JNIEnv.- 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); ... }
- Buat class Java - InputEnabledTextViewdengan akses ke- InputConnection.- 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); }
- Tambahkan - InputEnabledTextViewyang dibuat ke tata letak UI. Misalnya, kode berikut di- activity_main.xmldapat memosisikannya di bagian bawah layar:- <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" />
- Ambil class - InputEnabledTextViewbaru ini ke aktivitas Java Anda. Proses ini relatif sederhana jika Anda menggunakan View Binding:- 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); }
- Di library C, teruskan - inputConnectionke- GameTextInput_setInputConnection. Teruskan callback di- GameTextInput_setEventCallbackuntuk diberi tahu tentang peristiwa sebagai struktur status C- GameTextInputState.- 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); }
- Di library C, panggil - GameTextInput_processEvent, yang secara internal memanggil callback yang terdaftar di langkah sebelumnya, agar aplikasi Anda dapat menangani peristiwa saat status berubah.- 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); }
Fungsi utilitas
Library GameTextInput menyertakan fungsi utilitas yang memungkinkan Anda mengonversi
objek status Java dan struktur status C. Akses fungsionalitas untuk menampilkan
dan menyembunyikan IME melalui fungsi
GameTextInput_showIme
dan
GameTextInput_hideIme.
Referensi
Developer mungkin merasa bahwa hal berikut bermanfaat saat membuat aplikasi dengan
GameTextInput:
- Aplikasi pengujian GameTextInput
- Menggunakan GameTextInput dengan GameActivity
- Dokumen Referensi GameTextInput
- Kode sumber GameTextInput
Masukan
Untuk masalah dan pertanyaan apa pun terkait GameTextInput, buat
bug di Google IssueTracker.
