קלט של GameText חלק מ-Android Game Development Kit.
הספרייה GameTextInput
היא חלופה פשוטה יותר ל-Android במסך מלא שמשתמשת
מקלדת להזנת טקסט.
GameTextInput
מספק API פשוט להצגה או להסתרה של הרכיב האינטראקטיבי
במקלדת, להגדיר או לקבל את הטקסט שנערך עכשיו ולקבל התראות כאשר
הטקסט השתנה. הוא לא מיועד לאפליקציות מתקדמות לעריכת טקסט, אבל
עדיין מספק תמיכה בבחירה וכתיבת חיבור של אזור למקרי שימוש טיפוסיים
משחקים. הספרייה הזו תומכת גם בעורך שיטות קלט מתקדם
(IME), כמו איות-
לבדוק, השלמות ותווים עם ריבוי מקשים.
באופן פנימי, GameTextInput
צובר את טקסט הקלט (ביחד עם
הרלוונטיים) למאגר הפנימי GameTextInput::currentState_
, ומודיע
באפליקציה של השינויים שבוצעו בה. לאחר מכן האפליקציה מבצעת עיבוד טקסט
פונקציית קריאה חוזרת רשומה.
זמינות
ניתן להשתמש ב-GameTextInput
בדרכים הבאות:
יחד עם GameActivity: GameActivity משלב את GameTextInput. אפליקציות שמשתמשות ב-GameActivity יכולות להשתמש רק קלט GameText. הוראות השימוש מתועדות במלואן בדף 'פעילות משחקים' . עבור לדוגמה של שילוב GameActivity ו-GameTextInput, ראו את למאגר לדוגמה של משחקים מודל השימוש הזה הוא לא נכללות במדריך זה.
כספרייה עצמאית: שאר המדריך מתאר את שלבי השימוש.
לתשומת ליבכם: שתי השיטות שמפורטות למעלה הן בלעדיות ואין חפיפה ביניהן.
גרסאות רשמיות של GameTextInput
זמינות בערוצים הבאים:
- הגרסה של ספריית המשחקים של Jetpack ב-Google Maven
- שחרור של קובצי ZIP בדף ההורדה של AGDK
המדריך הזה עוסק בתרחיש השימוש הראשון. כדי להשתמש בגרסאות של קובץ ZIP: לעיין בהוראות שנשלחות בתוך החבילה.
הגדרת ה-build
GameTextInput
מופץ כארכיון Android (AAR). ה-AAR הזה מכיל את המחלקות Java
את קוד המקור C, שמטמיע את התכונות המקוריות של GameTextInput
. שלך
תצטרכו לכלול את קובצי המקור האלה בתהליך ה-build שלכם,
Prefab
שחושף ספריות נייטיב וקוד מקור לפרויקט CMake או ל-NDK build.
פועלים לפי ההוראות בקטע הדף Jetpack משחקים ב-Android כדי להוסיף את תלות של ספרייה אחת
GameTextInput
בקובץbuild.gradle
של המשחק. הערה שאם האפליקציות שלכם משתמשות ב-GameActivity, הן לא יכולות להשתמש הספריהGameTextInput
הנפרדת.חשוב לוודא שהשדה
gradle.properties
מכיל את השורות הבאות:# 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
ומוסיפים אותה ליעד ב- קובץCMakeLists.txt
של הפרויקט:find_package(game-text-input REQUIRED CONFIG) ... target_link_libraries(... game-text-input::game-text-input)
באחד מקובצי
.cpp
במשחק שלך, צריך להוסיף את השורה הבאה כדי לכלול אותה ההטמעה שלGameTextInput
:#include <game-text-input/gametextinput.cpp>
בקובצי המקור שמשתמשים ב-
GameTextInput
C API, יש לכלול את הכותרת file:#include <game-text-input/gametextinput.h>
הידור והפעלה של האפליקציה. אם יש שגיאות ב-CMake, יש לאמת את ה-AAR ואז
build.gradle
הקבצים מוגדרים כראוי. אם הקובץ#include
הוא לא נמצא, יש לאמת את קובץ התצורהCMakeLists.txt
.
שילוב ה-build
מ-thread C שכבר מחובר ל-JVM, או מה-API הראשי של האפליקציה שרשור, שיחה
GameTextInput_init
עם מצביע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); ... }
יצירת כיתת Java
InputEnabledTextView
עם גישה אל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); }
צריך להוסיף את
InputEnabledTextView
שנוצר לפריסת ממשק המשתמש. לדוגמה, הקוד הבא ב-activity_main.xml
יכול למקם אותו בתחתית המסך:<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" />
מאחזרים את המחלקה החדשה הזו של
InputEnabledTextView
לפעילות ב-Java. הדבר פשוט יחסית כשמשתמשים בקישור תצוגה: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, מעבירים את
inputConnection
אלGameTextInput_setInputConnection
. העברת התקשרות חזרה בעודGameTextInput_setEventCallback
כדי לקבל התראות על אירועים כמבנה מצב CGameTextInputState
.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,
GameTextInput_processEvent
, שקוראת באופן פנימי לקריאה החוזרת שלכם שנרשמה בשלב הקודם, האפליקציה שלך כדי לטפל באירועים כשהמצב משתנה.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); }
פונקציות עזר
הספרייה GameTextInput
כוללת פונקציות עזר שמאפשרות להמיר
בין אובייקטים של מצב Java לבין מבנים של מצב C. פונקציונליות גישה להצגה
ולהסתיר את ה-IME דרך GameTextInput_showIme
ו-GameTextInput_hideIme
למשימות ספציפיות.
קובצי עזר
המידע הבא יעזור למפתחים ליצור אפליקציות
GameTextInput
:
- אפליקציית הבדיקה GameTextInput
- שימוש ב-GameTextInput עם GameActivity
- מסמך עזר של GameTextInput
- קוד המקור של GameTextInput
משוב
אם יש בעיות או שאלות לגבי GameTextInput
, אפשר ליצור כאן
באג ב-Google IssueTracker.