GameTextInput Android Game Development Kit'in bir parçasıdır.
GameTextInput kitaplığını kullanmak, metin girişi için sanal klavyeyi kullanan tam ekran bir Android uygulaması yazmaya kıyasla daha basit bir alternatiftir.
GameTextInput, sanal klavyeyi göstermek veya gizlemek, düzenlenmekte olan metni ayarlamak ya da almak ve metin değiştirildiğinde bildirim almak için basit bir API sağlar. Bu, tam teşekküllü metin düzenleyici uygulamalar için tasarlanmamıştır ancak yine de oyunlardaki tipik kullanım alanları için seçim ve oluşturma bölgesi desteği sağlar. Ayrıca bu kitaplık, yazım denetimi, tamamlama ve çok tuşlu karakterler gibi gelişmiş giriş yöntemi düzenleyici (IME) özelliklerini destekler.
Dahili olarak GameTextInput, giriş metnini (ilgili durumlarla birlikte) dahili arabelleğe GameTextInput::currentState_ ekler ve uygulamayı arabellekteki değişiklikler konusunda bilgilendirir. Uygulama daha sonra kayıtlı geri çağırma işlevinde metin işleme 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 ayrıntılı olarak belgelenmiştir. GameActivity ve GameTextInput entegrasyonu örneği için games-samples deposuna bakın. Bu kullanım modeli, bu kılavuzun kapsamı dışındadır.
Bağımsız bir kitaplık olarak: Kılavuzun geri kalanında kullanım adımları açıklanmaktadır.
Yukarıdaki iki yöntemin birbirini dışladığını unutmayın.
Resmi GameTextInput sürümler, Google Maven'deki Jetpack games kitaplığı sürümünde kullanılabilir.
Derlemenizi ayarlama
GameTextInput, Android Arşivi (AAR) olarak dağıtılır. Bu AAR, GameTextInput uygulamasının yerel özelliklerini uygulayan Java sınıflarını ve C kaynak kodunu içerir. Bu kaynak dosyaları, Prefab aracılığıyla derleme sürecinize dahil etmeniz gerekir. Bu araç, yerel kitaplıkları ve kaynak kodu CMake projenize veya NDK derlemenize sunar.
Jetpack Android Games sayfasındaki talimatları uygulayarak
GameTextInputkitaplık bağımlılığını oyununuzunbuild.gradledosyasına ekleyin. Uygulamalarınız GameActivity'yi kullanıyorsa bağımsızGameTextInputkitaplığını kullanamayacağını unutmayın.gradle.propertiesdosyasının aşağıdaki satırları içerdiğinden 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=truegame-text-inputpaketini içe aktarın ve projenizinCMakeLists.txtdosyasındaki hedefinize ekleyin:find_package(game-text-input REQUIRED CONFIG) ... target_link_libraries(... game-text-input::game-text-input)Oyununuzdaki
.cppdosyalarından birine,GameTextInputuygulamasını eklemek için aşağıdaki satırı ekleyin:#include <game-text-input/gametextinput.cpp>GameTextInputC API'sini 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.gradledosyalarının doğru şekilde ayarlandığını doğrulayın.#includedosyası bulunamazsaCMakeLists.txtyapılandırma dosyanızı doğrulayın.
Derlemenizi entegre etme
JVM'ye veya uygulamanın ana iş parçacığına zaten eklenmiş olan C iş parçacığınızdan
GameTextInput_initişleviniJNIEnvişaretçisiyle çağırı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); ... }InputConnectionerişimi olan birInputEnabledTextViewJava 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.xmliçindeki aşağıdaki kod, öğeyi 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
InputEnabledTextViewsınıfını Java etkinliğinize alın. Görünüm bağlamayı kullandığınızda bu işlem 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
inputConnectiondeğeriniGameTextInput_setInputConnectioniçine iletin. C durumu yapısıGameTextInputStateolarak etkinliklerden haberdar olmak içinGameTextInput_setEventCallbackiçinde bir geri çağırma 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, durum değiştiğinde uygulamanızın etkinlikleri işlemesi için
GameTextInput_processEventişlevini çağırın. Bu işlev, dahili olarak önceki adımda kaydedilen geri çağırma işlevinizi ç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 durum nesneleri ile C durum yapıları arasında dönüştürme yapmanızı sağlayan yardımcı işlevler içerir. GameTextInput_showIme ve GameTextInput_hideIme işlevleri aracılığıyla IME'yi gösterme ve gizleme işlevine erişim.
Referanslar
Geliştiriciler, GameTextInput ile uygulama oluştururken aşağıdaki bilgileri faydalı bulabilir:
- GameTextInput test uygulaması
- GameTextInput'u GameActivity ile kullanma
- GameTextInput Reference doc
- GameTextInput kaynak kodu
Geri bildirim
GameTextInput ile ilgili sorunlar ve sorular için Google IssueTracker'da hata kaydı oluşturun.