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:

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.

  1. Şu sayfadaki talimatları uygulayın: Jetpack Android Games sayfasında Oyununuzun build.gradle dosyasına GameTextInput kitaplık bağımlılığı. Not kullanıyorsanız şunu kullanamazlar: bağımsız GameTextInput kitaplığı.

  2. 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
    
  3. game-text-input paketini içe aktarın ve projenin CMakeLists.txt dosyası:

    find_package(game-text-input REQUIRED CONFIG)
    ...
    target_link_libraries(... game-text-input::game-text-input)
    
  4. Oyununuzdaki .cpp dosyalarının birine aşağıdaki satırı ekleyin: GameTextInput uygulaması:

    #include <game-text-input/gametextinput.cpp>
    
  5. GameTextInput C API'yi kullanan kaynak dosyalarda başlığı dahil edin. dosya:

    #include <game-text-input/gametextinput.h>
    
  6. 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

  1. JVM'ye zaten bağlı olan C iş parçacığınızdan veya ana uygulama uygulamasından mesaj dizisi, GameTextInput_init numaralı telefonu ara JNIEnv 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);
        ...
    }
    
  2. Ş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);
    }
    
  3. 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" />
    
  4. 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ğlama

    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);
      }
    
  5. 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 struct GameTextInputState 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);
    }
    
  6. 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:

Geri bildirim

GameTextInput ile ilgili soru ve sorunlarınız için şunu oluşturun: Google IssueTracker'da bir hata oluştu.