בנוסף לשיטות קלט רכות – כמו מקלדות וירטואליות – מערכת Android תומכת במקלדות פיזיות שמחוברות למכשיר. מקלדת היא אמצעי נוח להזנת טקסט, והיא מאפשרת למשתמשים לנווט באפליקציה וליצור איתה אינטראקציה. למרות שברוב המכשירים הניידים, כמו טלפונים, נעשה שימוש במגע כאמצעי האינטראקציה העיקרי, טאבלטים ומכשירים דומים הם פופולריים, ומשתמשים רבים אוהבים לחבר אליהם אביזרים כמו מקלדות.
ככל שיותר מכשירים עם Android מציעים חוויה כזו, חשוב לבצע אופטימיזציה לאפליקציה כדי לתמוך באינטראקציה באמצעות מקלדת. במסמך הזה מוסבר איך אפשר לשפר את הניווט באמצעות מקלדת.
בדיקת האפליקציה
יכול להיות שהמשתמשים כבר יכולים לנווט באפליקציה באמצעות מקלדת, כי מערכת Android מפעילה כברירת מחדל את רוב ההתנהגויות הנדרשות.
כל הווידג'טים האינטראקטיביים שמסופקים על ידי מסגרת Android – כמו Button ו-EditText – ניתנים למיקוד. המשמעות היא שהמשתמשים יכולים לנווט באמצעות מכשירי בקרה כמו כפתורי החיצים (D-pad) או מקלדת, וכל ווידג'ט זוהר או משנה את המראה שלו כשהוא מקבל פוקוס קלט.
כדי לבדוק את האפליקציה, מבצעים את הפעולות הבאות:
- מתקינים את האפליקציה במכשיר עם מקלדת חומרה.
אם אין לכם מכשיר חומרה עם מקלדת, אתם יכולים לחבר מקלדת Bluetooth או מקלדת USB.
אפשר גם להשתמש באמולטור של Android:
- ב-AVD Manager, לוחצים על New Device או בוחרים פרופיל קיים ולוחצים על Clone.
- בחלון שמופיע, מוודאים שהאפשרויות מקלדת ולחצני הכיוון מופעלות.
- כדי לבדוק את האפליקציה, משתמשים רק במקש Tab כדי לנווט בממשק המשתמש. מוודאים שכל רכיב אינטראקטיבי מקבל את המיקוד כמו שצריך.
מחפשים מקרים שבהם המיקוד עובר בצורה לא צפויה.
- מתחילים שוב מההתחלה של האפליקציה ומנווטים בממשק המשתמש באמצעות אמצעי בקרה לניווט, כמו מקשי החיצים במקלדת. מכל רכיב שאפשר להתמקד בו בממשק המשתמש, לוחצים על החץ למעלה, החץ למטה, החץ שמאלה והחץ ימינה.
מחפשים מקרים שבהם המיקוד עובר בצורה לא צפויה.
אם נתקלתם במקרים שבהם הניווט באמצעות מקש Tab או מקשי החיצים לא פועל כמו שציפיתם, אתם צריכים לציין איפה המיקוד צריך להיות בפריסה, כמו שמוסבר בקטעים הבאים.
טיפול בניווט באמצעות מקש Tab
כשמשתמש מנווט באפליקציה באמצעות מקש Tab במקלדת, המערכת מעבירה את מיקוד הקלט בין הרכיבים לפי הסדר שבו הם מופיעים בפריסה. אם משתמשים בפריסה יחסית, למשל, והסדר של האלמנטים במסך שונה מהסדר בקובץ, יכול להיות שתצטרכו לציין ידנית את סדר המיקוד.
לדוגמה, בפריסה הבאה, שני כפתורים מיושרים לצד ימין, ושדה טקסט מיושר לצד שמאל של הכפתור השני. כדי להעביר את המיקוד מהלחצן הראשון לשדה הטקסט ואז ללחצן השני, צריך להגדיר בפריסה באופן מפורש את סדר המיקוד לכל אחד מהרכיבים שאפשר להתמקד בהם באמצעות המאפיין android:nextFocusForward.
<androidx.constraintlayout.widget.ConstraintLayout ...> <Button android:id="@+id/button1" android:nextFocusForward="@+id/editText1" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" ... /> <Button android:id="@+id/button2" android:nextFocusForward="@+id/button1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/button1" ... /> <EditText android:id="@id/editText1" android:nextFocusForward="@+id/button2" app:layout_constraintBottom_toBottomOf="@+id/button2" app:layout_constraintRight_toLeftOf="@id/button2 ... /> ... </androidx.constraintlayout.widget.ConstraintLayout>
עכשיו, במקום שהמיקוד יעבור מbutton1 אל button2 ואז אל editText1, הוא עובר בצורה מתאימה לפי המיקום במסך: מbutton1 אל editText1 ואז אל button2.
טיפול בניווט בכיוון מסוים
המשתמשים יכולים גם לנווט באפליקציה באמצעות מקשי החיצים במקלדת, כמו בניווט באמצעות מקשי חצים או כדור עקיבה. המערכת מספקת "ניחוש מושכל" לגבי התצוגה שצריך להתמקד בה בכיוון מסוים, על סמך הפריסה של התצוגות במסך. עם זאת, לפעמים המערכת מנחשת לא נכון.
אם המערכת לא מעבירה את המיקוד לתצוגה המתאימה כשמנווטים בכיוון מסוים, צריך לציין איזו תצוגה צריכה לקבל את המיקוד באמצעות המאפיינים הבאים:
כל מאפיין מציין את התצוגה הבאה שתקבל את המיקוד כשהמשתמש ינווט בכיוון הזה, כפי שמצוין על ידי מזהה התצוגה. הדוגמה הבאה ממחישה את זה:
<Button android:id="@+id/button1" android:nextFocusRight="@+id/button2" android:nextFocusDown="@+id/editText1" ... /> <Button android:id="@id/button2" android:nextFocusLeft="@id/button1" android:nextFocusDown="@id/editText1" ... /> <EditText android:id="@id/editText1" android:nextFocusUp="@id/button1" ... />
מקורות מידע נוספים
כדאי לעיין במקורות המידע הבאים שקשורים לנושא: