תמיכה במקלדות ניתקות עוזרת למשתמשים להפיק את המרב מהפרודוקטיביות במכשירים עם מסכים גדולים. מערכת Android מפעילה שינוי בהגדרות בכל פעם שמקלדת מחוברת למכשיר או מנותקת ממנו, מה שעלול לגרום לאובדן של מצב ממשק המשתמש. האפליקציה יכולה לשמור את המצב שלה ולשחזר אותו, וכך לאפשר למערכת לטפל ביצירה מחדש של הפעילות, או להגביל את היצירה מחדש של הפעילות במקרה של שינויים בהגדרות המקלדת.
בכל המקרים, כל הנתונים שקשורים למקלדת מאוחסנים באובייקט Configuration. השדות keyboard ו-keyboardHidden של אובייקט ההגדרה מכילים מידע על סוג המקלדת והזמינות שלה.
שיטות מומלצות
אפליקציות שעברו אופטימיזציה למסכים גדולים תומכות בכל סוג של מכשיר קלט, ממקלדות תוכנה וחומרה ועד לעט סטיילוס, עכבר, משטח מגע ומכשירים היקפיים אחרים.
התמיכה במקלדות חיצוניות כוללת שינויים בהגדרות, שאפשר לנהל אותם באחת משתי דרכים:
- המערכת תיצור מחדש את הפעילות שפועלת, ואתם תצטרכו לנהל את מצב האפליקציה.
- לנהל את שינוי ההגדרה בעצמכם (הפעילות לא תיווצר מחדש):
- הצהרה על כל ערכי ההגדרה שקשורים למקלדת
- יצירת handler לשינוי הגדרות
אפליקציות פרודוקטיביות, שלעתים קרובות דורשות שליטה מדויקת בממשק המשתמש כדי להזין טקסט וקלט אחר, יכולות להפיק תועלת מהגישה של עשה זאת בעצמך לטיפול בשינויים בהגדרות.
במקרים מיוחדים, יכול להיות שתרצו לשנות את פריסת האפליקציה כשמקלדת חומרה מחוברת או מנותקת, למשל כדי לפנות יותר מקום לכלים או לחלונות עריכה.
ב-Jetpack פיתוח נייטיב, יש שתי דרכים להגיב לשינויים בהגדרות המקלדת:
- ממשק משתמש ריאקטיבי: קוראים את מצב ההגדרה הנוכחי ישירות ברכיבי ה-Composable באמצעות
LocalConfiguration.current. ממשק המשתמש משתנה באופן אוטומטי כדי להתאים למצב החדש כשמחברים או מנתקים מקלדת. - קריאה חוזרת (callback) של תופעות לוואי: אפשר להשתמש ב-
DisposableEffectשמודע למחזור החיים כדי לרשום מאזין לשינוי בהגדרה בפעילות המארחת. כך אפשר להפעיל אירועים שאינם קשורים לממשק המשתמש (כמו רישום ביומן או ניתוח נתונים) בלי ליצור מחדש את הפעילות או ליצור מופע של רכיבי תצוגה פיקטיביים.
אלמנטים
-
android:configChanges: מאפיין של רכיב<activity>בקובץ המניפסט של האפליקציה. האפליקציה מעדכנת את המערכת לגבי שינויים בהגדרות שהיא מנהלת. -
LocalConfiguration: ספק מקומי שאפשר להרכיב ממנו ספק אחר, והוא חושף אתConfigurationהמכשיר הנוכחי. -
DisposableEffect: API של אפקט צדדי של Compose שמריץ בלוק קוד כשאלמנט Composable נכנס לקומפוזיציה, ומנקה כשיוצא ממנה.
צעדים
מצהירים על המאפיין configChanges ומוסיפים ערכים שקשורים למקלדת כדי למנוע יצירה מחדש של פעילות. אחר כך, משתמשים ב-LocalConfiguration.current כדי להתאים באופן דינמי את הפריסה של הרכיבים, או רושמים מאזין להגדרות באמצעות DisposableEffect.
1. הצהרה על מאפיין configChanges
מעדכנים את רכיב <activity> בקובץ המניפסט של האפליקציה על ידי הוספת הערכים keyboard|keyboardHidden לרשימת השינויים בהגדרות שכבר מנוהלות:
<activity
…
android:configChanges="...|keyboard|keyboardHidden">
2. תגובה לשינויים בהגדרות המקלדת
כדי לטפל בשינויים בהגדרות ב-Jetpack Compose, אפשר להשתמש באחת מהאפשרויות הבאות, בהתאם למה שרוצים לעשות: לעדכן את ממשק המשתמש או להפעיל קריאה חוזרת של תופעת לוואי:
אפשרות א': ממשק משתמש חכם (מומלץ)
אפשר לקרוא את סוג המקלדת ישירות מ-
LocalConfiguration.current. כשמקלדת חומרה מחוברת או מנותקת, הערך הזה משתנה ו-Compose מרכיב מחדש את ממשק המשתמש באופן אוטומטי.val configuration = LocalConfiguration.current val isPhysicalKeyboardAttached = configuration.keyboard == Configuration.KEYBOARD_QWERTY if (isPhysicalKeyboardAttached) { // Render layout optimized for physical keyboard } else { // Render default layout }
אפשרות ב': Side-Effect Listener
אם אתם צריכים להריץ תופעת לוואי (כמו רישום ביומן, עדכון של מסד נתונים מקומי או הפעלה של ניתוח נתונים) כשמתבצע שינוי בהגדרה, אתם יכולים להשתמש ב-
DisposableEffectכדי לרשום מאזין לשינוי בהגדרה במארחComponentActivity.val context = LocalActivity.current DisposableEffect(context) { val activity = context as? ComponentActivity val listener = Consumer<Configuration> { newConfig -> val hasKeyboard = newConfig.keyboard == Configuration.KEYBOARD_QWERTY // Trigger non-UI actions, analytics, etc. } activity?.addOnConfigurationChangedListener(listener) onDispose { activity?.removeOnConfigurationChangedListener(listener) } }
תוצאות
האפליקציה תגיב עכשיו לחיבור או לניתוק של מקלדת חיצונית בלי ליצור מחדש את הפעילות שמתבצעת.
מקורות מידע נוספים
במאמר שמירת מצבי ממשק המשתמש מוסבר איך לשמור את מצב ממשק המשתמש של האפליקציה במהלך שינויים בהגדרות, כמו חיבור או ניתוק של מקלדת.