הטמעת הגדלת טקסט

אפשר לנסות את הדרך של כתיבת הודעה
‫Jetpack Compose היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android. איך משתמשים בטקסט בכתיבה.

הווידג'ט של זכוכית המגדלת זמין ב-Android מגרסה 9 (רמת API‏ 28) ואילך. זהו זכוכית מגדלת וירטואלית שמציגה עותק מוגדל של View דרך חלונית שכבת-על שמייצגת את העדשה. התכונה משפרת את חוויית המשתמש בהוספה ובחירה של טקסט. כשמשתמשים מפעילים את הזכוכית המגדלת על טקסט, אפשר למקם את הסמן או את נקודות האחיזה של הבחירה בצורה מדויקת על ידי צפייה בטקסט המוגדל בחלונית שזזה לפי האצבע.

באיור 1 רואים איך הזכוכית המגדלת עוזרת לבחור טקסט. ממשקי ה-API של זכוכית המגדלת לא קשורים לטקסט, ואפשר להשתמש בווידג'ט הזה במגוון תרחישי שימוש, כמו קריאת טקסט קטן או הגדלה של שמות מקומות במפות שקשה לראות.

תמונה שמראה איך זכוכית המגדלת מופיעה אחרי שמושכים את נקודת האחיזה הימנית של הבחירה
איור 1. הגדלת הטקסט. כשהמשתמש גורר את נקודת האחיזה של הבחירה הימנית, זכוכית המגדלת קופצת כדי לעזור במיקום מדויק.

הזכוכית המגדלת כבר משולבת בווידג'טים של הפלטפורמה, כמו 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.

איור 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. כמה נקודות שכדאי לזכור:

  • הזכוכית המגדלת מופעלת מיד כשהמשתמש אוחז בנקודת אחיזה להוספה או לבחירה.
  • ההגדלה תמיד עוקבת בצורה חלקה אחרי האצבע של המשתמש אופקית, בעוד שבאופן אנכי היא קבועה במרכז של שורת הטקסט הנוכחית.
  • כשמזיזים את הזכוכית המגדלת אופקית, היא זזה רק בין הגבולות השמאלי והימני של השורה הנוכחית. בנוסף, אם המשתמש מרים את האצבע מהמסך כשהיא נמצאת מחוץ לגבולות האלה, והמרחק האופקי בין האצבע לבין הגבול הקרוב ביותר גדול מחצי הרוחב המקורי של התוכן בתוך הזכוכית המגדלת, הזכוכית המגדלת נסגרת כי הסמן כבר לא מוצג בתוכה.
  • הזכוכית המגדלת אף פעם לא מופעלת כשהגופן של הטקסט גדול מדי. הטקסט נחשב גדול מדי אם ההפרש בין החלק התחתון של הגופן לבין החלק העליון שלו גדול יותר מגובה התוכן שמוצג בזכוכית המגדלת. במקרה הזה, הפעלת הזכוכית המגדלת לא מוסיפה ערך.