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

רוצה לנסות את שיטת הכתיבה?
'Jetpack פיתוח נייטיב' היא ערכת הכלים המומלצת לממשק המשתמש ל-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. מה כדאי לעשות?

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