GameTextInput Android Game Development Kit'in bir parçasıdır.
GameTextInput
kitaplığını kullanmak, metin girişi için yumuşak klavye kullanan tam ekran Android uygulaması yazmaya daha basit bir alternatiftir.
GameTextInput
, yazılım klavyesini göstermek veya gizlemek, o anda düzenlenmiş metni ayarlamak veya almak ve metin değiştirildiğinde bildirim almak için basit bir API sunar. Bu özellik, tam donanımlı metin düzenleyici uygulamaları için tasarlanmamıştır ancak oyunların tipik kullanım alanları için bölge seçme ve oluşturma desteği sunar. Ayrıca bu kitaplık; yazım denetimi, tamamlamalar ve çok tuşlu karakterler gibi gelişmiş giriş yöntemi düzenleyici (IME) özelliklerini de destekler.
GameTextInput
, dahili olarak, giriş metnini (ilgili durumlarla birlikte) GameTextInput::currentState_
dahili arabelleğinde toplar ve uygulamayı bu tür değişiklikler konusunda bilgilendirir. Ardından uygulama, kayıtlı geri çağırma işlevinde
metin işlemeyi gerçekleştirir.
Kullanılabilirlik
GameTextInput
aşağıdaki şekillerde kullanılabilir:
GameActivity ile birlikte: GameActivity, GameTextInput'u entegre eder. GameActivity kullanan uygulamalar yalnızca entegre GameTextInput'u kullanabilir. Kullanım talimatları GameActivity sayfasında eksiksiz olarak belgelenmiştir. GameActivity ve GameTextInput entegrasyonu örneği için games-samples deposuna bakın. Bu kullanım modeli, bu kılavuzun kapsamında değildir.
Bağımsız bir kitaplık olarak: Kılavuzun geri kalanında kullanım adımları açıklanmıştır.
Yukarıdaki iki yöntemin karşılıklı olarak birbirini dışladığını unutmayın.
Resmi GameTextInput
sürümleri aşağıdaki kanallarda sunulmaktadır:
- Jetpack oyun kitaplığı Google Maven'da kullanıma sunuldu
- Zip dosyası AGDK indirme sayfasından serbest bırakılır
Bu kılavuzda ilk kullanım alanı ele alınmaktadır. Zip dosya sürümlerini kullanmak için, paketin içinde gönderilen talimatlara bakın.
Derlemenizi ayarlama
GameTextInput
, Android Arşivi (AAR) olarak dağıtılmıştır. Bu AAR, Java sınıflarını ve GameTextInput
yerel özelliklerini uygulayan C kaynak kodunu içerir. Bu kaynak dosyaları, CMake projenize veya NDK derlemenize yerel kitaplıkları ve kaynak kodu sunan Prefab
aracılığıyla derleme sürecinize eklemeniz gerekir.
GameTextInput
kitaplığı bağımlılığını oyununuzunbuild.gradle
dosyasına eklemek için Jetpack Android Games sayfasındaki talimatları uygulayın. GameActivity kullanıyorsanız uygulamalarınız bağımsızGameTextInput
kitaplığını kullanamazlar.gradle.properties
alanında aşağıdaki satırları bulunduğundan emin olun:# 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
game-text-input
paketini içe aktarın ve projenizinCMakeLists.txt
dosyasındaki hedefinize ekleyin:find_package(game-text-input REQUIRED CONFIG) ... target_link_libraries(... game-text-input::game-text-input)
Oyununuzdaki
.cpp
dosyalarından birine, aşağıdaki satırıGameTextInput
uygulamasını içerecek şekilde ekleyin:#include <game-text-input/gametextinput.cpp>
GameTextInput
C API'yi kullanan kaynak dosyalara başlık dosyasını ekleyin:#include <game-text-input/gametextinput.h>
Uygulamayı derleyip çalıştırın. CMake hataları varsa AAR ve
build.gradle
dosyalarının düzgün şekilde ayarlandığını doğrulayın.#include
dosyası bulunamazsaCMakeLists.txt
yapılandırma dosyanızı doğrulayın.
Derlemenizi entegre edin
JVM'ye veya uygulama ana iş parçacığına zaten bağlı olan C iş parçacığınızdan
JNIEnv
işaretçisiyleGameTextInput_init
çağrısı yapın.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); ... }
InputConnection
erişimi olan birInputEnabledTextView
Java sınıfı oluşturun.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); }
Oluşturulan
InputEnabledTextView
öğesini kullanıcı arayüzü düzenine ekleyin. Örneğin,activity_main.xml
yerel ayarında aşağıdaki kod bunu ekranın alt kısmına yerleştirebilir:<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" />
Bu yeni
InputEnabledTextView
sınıfını Java etkinliğinize alın. Görünüm Bağlama'yı kullandığınızda bu işlemi yapmak nispeten basittir: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); }
C kitaplığınızda
inputConnection
değeriniGameTextInput_setInputConnection
hesabına geçirin. Etkinliklerle ilgili bildirim almak için C state structGameTextInputState
olarakGameTextInput_setEventCallback
içinde geri arama iletin.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); }
C kitaplığınızda
GameTextInput_processEvent
yöntemini çağırın. Bu çağrı, durum değiştiğinde uygulamanızın etkinlikleri işlemesi için önceki adımda kaydedilen geri çağırma işlemini dahili olarak çağırır.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); }
Yardımcı işlevler
GameTextInput
kitaplığı, Java durumu nesneleri ile C durumu struct'ları arasında dönüşüm yapmanızı sağlayan yardımcı program işlevleri içerir. GameTextInput_showIme
ve GameTextInput_hideIme
işlevleri aracılığıyla IME'yi gösterme ve gizleme işlevine erişin.
Referanslar
Geliştiriciler GameTextInput
ile uygulama oluştururken aşağıdakiler yararlı olabilir:
- GameTextInput test uygulaması
- GameActivity ile GameTextInput'u kullanma
- GameTextInput Referans belgesi
- GameTextInput kaynak kodu
Geri bildirim
GameTextInput
ile ilgili sorularınız ve sorunlarınız için Google IssueTracker'da hata kaydı oluşturun.