Oyun Metni Girişi Android Oyun Geliştirme Kiti'nin bir parçasıdır.
GameTextInput
kitaplığını kullanmayla ilgili
tam ekran Android uygulaması yazmaya daha basit bir alternatif.
klavyeyi kullanın.
GameTextInput
, yazılımı göstermek veya gizlemek için basit bir API sunar.
klavyeyi kullanın, düzenlenmiş metni ayarlayın veya alın ve
metin değiştiriliyor. Bu, tam kapsamlı metin düzenleyici uygulamaları için değildir ancak
standart kullanım durumları için seçme ve oluşturma bölgesi desteği sunmaya devam ediyor:
oyunlar. Ayrıca, bu kitaplık gelişmiş giriş yöntemi düzenleyicisini destekler.
(IME) özellikleri
tamamlamalar ve çok tuşlu karakterler yer alır.
GameTextInput
, dahili olarak giriş metnini toplar (
ilgili durumları) dahili arabelleğe GameTextInput::currentState_
ekler ve
değişiklik olup olmadığını kontrol edin. Uygulama, daha sonra
kayıtlı geri çağırma işlevinden farklıdır.
Kullanılabilirlik
GameTextInput
aşağıdaki şekillerde kullanılabilir:
GameActivity ile birlikte: GameActivity, GameTextInput'u entegre eder. GameActivity kullanan uygulamalar yalnızca GameTextInput. Kullanım talimatları, Oyun Etkinliği sayfasına göz atın. Örneğin, GameActivity ve GameTextInput entegrasyonunun örneği için oyun örnekleri deposu'na gidin. Bu kullanım modeli bu kılavuzun kapsamında değil.
Bağımsız bir kitaplık olarak: Kılavuzun geri kalanında kullanım adımları açıklanmaktadır.
Yukarıdaki iki yöntemin birlikte kullanılamayacağını unutmayın.
Resmi GameTextInput
sürümleri aşağıdaki kanallarda mevcuttur:
- Google Maven'de Jetpack oyun kitaplığı sürümü
- AGDK indirme sayfasında ZIP dosyası sürümleri
Bu kılavuz ilk kullanım alanını kapsar. ZIP dosyası sürümlerini kullanmak için paketin içinde gönderilen talimatlara bakın.
Derlemenizi ayarlayın
GameTextInput
, Android Arşivi (AAR) olarak dağıtılır. Bu AAR, Java sınıflarını ve
GameTextInput
ürününün yerel özelliklerini uygulayan C kaynak kodu. Siz
Prefab
Bu komut, CMake projenize veya NDK derlemenize yerel kitaplıkları ve kaynak kodunu sunar.
Şu sayfadaki talimatları uygulayın: Jetpack Android Games sayfasında Oyununuzun
build.gradle
dosyasınaGameTextInput
kitaplık bağımlılığı. Not kullanıyorsanız şunu kullanamazlar: bağımsızGameTextInput
kitaplığı.gradle.properties
öğesinin şu 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=true
game-text-input
paketini içe aktarın ve projeninCMakeLists.txt
dosyası:find_package(game-text-input REQUIRED CONFIG) ... target_link_libraries(... game-text-input::game-text-input)
Oyununuzdaki
.cpp
dosyalarının birine aşağıdaki satırı ekleyin:GameTextInput
uygulaması:#include <game-text-input/gametextinput.cpp>
GameTextInput
C API'yi kullanan kaynak dosyalarda başlığı dahil edin. dosya:#include <game-text-input/gametextinput.h>
Uygulamayı derleyin ve çalıştırın. CMake hatalarınız varsa AAR'yi doğrulayın ve
build.gradle
dosyaları düzgün şekilde ayarlandı.#include
dosyası bulunamadı,CMakeLists.txt
yapılandırma dosyanızı doğrulayın.
Derlemenizi entegre edin
JVM'ye zaten bağlı olan C iş parçacığınızdan veya ana uygulama uygulamasından mesaj dizisi,
GameTextInput_init
numaralı telefonu araJNIEnv
işaretçiyle.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); ... }
Şuna erişimi olan bir
InputEnabledTextView
Java sınıfı oluşturun: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); }
Oluşturulan
InputEnabledTextView
öğesini kullanıcı arayüzü düzenine ekleyin. Örneğin,activity_main.xml
içinde yer alan aşağıdaki kod, onu sayfanın ekranda:<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" />
Java etkinliğiniz için bu yeni
InputEnabledTextView
sınıfını alın. Bu kullandığınızda göreli olarak daha basittir: Görünüm Bağlamapublic 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
dosyasını şu kullanıcıya iletin:GameTextInput_setInputConnection
Geri aranmayı şu kadar süre içinde verin:GameTextInput_setEventCallback
etkinliklerden C durumu structGameTextInputState
olarak haberdar edilecek.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
kullanır. uygulamanızı bu durum değiştiğinde etkinlikleri işlemek için kullanabilirsiniz.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ığı, dönüştürme yapmanızı sağlayan yardımcı program işlevleri içerir
ile C durumu struct'ları arasında geçiş yapacaktır. Göstermek için erişim işlevi
IME'yi GameTextInput_showIme
kullanarak
ve GameTextInput_hideIme
işlevlerine dahildir.
Referanslar
Geliştiriciler aşağıdakileri kullanarak uygulama oluştururken faydalı olabilir:
GameTextInput
:
- GameTextInput test uygulaması
- GameTextInput'u GameActivity ile kullanma
- GameTextInput Referans belgesi
- GameTextInput kaynak kodu
Geri bildirim
GameTextInput
ile ilgili soru ve sorunlarınız için şunu oluşturun:
Google IssueTracker'da bir hata oluştu.