הווידג'ט של זכוכית המגדלת זמין ב-Android מגרסה 9 (רמת API 28) ואילך. זהו זכוכית מגדלת וירטואלית שמציגה עותק מוגדל של View דרך חלונית שכבת-על שמייצגת את העדשה. התכונה משפרת את חוויית המשתמש בהוספה ובחירה של טקסט. כשמשתמשים מפעילים את הזכוכית המגדלת על טקסט, אפשר למקם את הסמן או את נקודות האחיזה של הבחירה בצורה מדויקת על ידי צפייה בטקסט המוגדל בחלונית שזזה לפי האצבע.
באיור 1 רואים איך הזכוכית המגדלת עוזרת לבחור טקסט. ממשקי ה-API של זכוכית המגדלת לא קשורים לטקסט, ואפשר להשתמש בווידג'ט הזה במגוון תרחישי שימוש, כמו קריאת טקסט קטן או הגדלה של שמות מקומות במפות שקשה לראות.
הזכוכית המגדלת כבר משולבת בווידג'טים של הפלטפורמה, כמו TextView, EditText ו-WebView. הוא מספק מניפולציה עקבית של טקסט באפליקציות.
הווידג'ט כולל API פשוט, ואפשר להשתמש בו כדי להגדיל כל View
בהתאם להקשר של האפליקציה.
שימוש ב-API
אפשר להשתמש בזכוכית המגדלת באופן פרוגרמטי בתצוגה שרירותית באופן הבא:
Kotlin
val view: View = findViewById(R.id.view) val magnifier = Magnifier.Builder(view).build() magnifier.show(view.width / 2.0f, view.height / 2.0f)
Java
View view = findViewById(R.id.view); Magnifier magnifier = new Magnifier.Builder(view).build(); magnifier.show(view.getWidth() / 2, view.getHeight() / 2);
בהנחה שהפריסה הראשונה מופיעה בהיררכיית התצוגה, הזכוכית המגדלת מוצגת במסך ומכילה אזור שממורכז בקואורדינטות שצוינו בתצוגה. החלונית מופיעה מעל נקודת המרכז של התוכן שמועתק. הזכוכית המגדלת מוצגת ללא הגבלת זמן עד שהמשתמש סוגר אותה.
בקטע הקוד הבא מוצג איך לשנות את הרקע של התצוגה המוגדלת:
Kotlin
view.setBackgroundColor(...)
Java
view.setBackgroundColor(...);
בהנחה שצבע הרקע גלוי בתוך הכלי להגדלת התצוגה, התוכן של הכלי הזה לא עדכני, כי אזור בתצוגה עם הרקע הישן עדיין מוצג. כדי לרענן את התוכן, משתמשים בשיטה update(), באופן הבא:
Kotlin
view.post { magnifier.update() }
Java
view.post(magnifier::update);
כשמסיימים, סוגרים את הזכוכית המגדלת באמצעות הקריאה לשיטה dismiss():
Kotlin
magnifier.dismiss()
Java
magnifier.dismiss();
הגדלה בעקבות אינטראקציה של משתמש
תרחיש נפוץ לשימוש בזכוכית מגדלת הוא לאפשר למשתמש להגדיל אזור תצוגה באמצעות מגע, כמו שמוצג באיור 2.
ViewGroup שמכיל ImageView בצד ימין ו-TextView בצד שמאל.כדי לעשות את זה, צריך לעדכן את הזכוכית המגדלת בהתאם לאירועי המגע שהתקבלו בתצוגה, באופן הבא:
Kotlin
imageView.setOnTouchListener { v, event -> when (event.actionMasked) { MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE -> { val viewPosition = IntArray(2) v.getLocationOnScreen(viewPosition) magnifier.show(event.rawX - viewPosition[0], event.rawY - viewPosition[1]) } MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_UP -> { magnifier.dismiss() } } true }
Java
imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: // Fall through. case MotionEvent.ACTION_MOVE: { final int[] viewPosition = new int[2]; v.getLocationOnScreen(viewPosition); magnifier.show(event.getRawX() - viewPosition[0], event.getRawY() - viewPosition[1]); break; } case MotionEvent.ACTION_CANCEL: // Fall through. case MotionEvent.ACTION_UP: { magnifier.dismiss(); } } return true; } });
שיקולים נוספים כשמגדילים את הטקסט
בווידג'טים של טקסט בפלטפורמה, חשוב להבין התנהגויות ספציפיות של זכוכית מגדלת ולהפעיל את הזכוכית המגדלת לתצוגת הטקסט המותאמת אישית באופן עקבי בכל פלטפורמת Android. כמה נקודות שכדאי לזכור:
- הזכוכית המגדלת מופעלת מיד כשהמשתמש אוחז בנקודת אחיזה להוספה או לבחירה.
- ההגדלה תמיד עוקבת בצורה חלקה אחרי האצבע של המשתמש אופקית, בעוד שבאופן אנכי היא קבועה במרכז של שורת הטקסט הנוכחית.
- כשמזיזים את הזכוכית המגדלת אופקית, היא זזה רק בין הגבולות השמאלי והימני של השורה הנוכחית. בנוסף, אם המשתמש מרים את האצבע מהמסך כשהיא נמצאת מחוץ לגבולות האלה, והמרחק האופקי בין האצבע לבין הגבול הקרוב ביותר גדול מחצי הרוחב המקורי של התוכן בתוך הזכוכית המגדלת, הזכוכית המגדלת נסגרת כי הסמן כבר לא מוצג בתוכה.
- הזכוכית המגדלת אף פעם לא מופעלת כשהגופן של הטקסט גדול מדי. הטקסט נחשב גדול מדי אם ההפרש בין החלק התחתון של הגופן לבין החלק העליון שלו גדול יותר מגובה התוכן שמוצג בזכוכית המגדלת. במקרה הזה, הפעלת הזכוכית המגדלת לא מוסיפה ערך.