टेक्स्ट को बड़ा करके दिखाने की सुविधा लागू करना

Compose को आज़माएं
Jetpack Compose, Android के लिए यूज़र इंटरफ़ेस (यूआई) टूलकिट है. हमारा सुझाव है कि आप इसका इस्तेमाल करें. Compose में टेक्स्ट का इस्तेमाल करने का तरीका जानें.

Android 9 (एपीआई लेवल 28) और इसके बाद के वर्शन में, मैग्निफ़ायर विजेट उपलब्ध है. यह एक वर्चुअल मैग्नीफ़ाइंग ग्लास है. इसकी मदद से, View की बड़ी कॉपी, लेंस दिखाने वाले ओवरले पैन में दिखती है. इस सुविधा से, टेक्स्ट डालने और चुनने के दौरान उपयोगकर्ता अनुभव बेहतर होता है. टेक्स्ट पर मैग्निफ़ायर लागू करने पर, उपयोगकर्ता कर्सर या सिलेक्शन हैंडल को सटीक जगह पर रख सकता है. इसके लिए, वह अपनी उंगली के साथ-साथ चलने वाले पैन में, ज़ूम इन किया गया टेक्स्ट देख सकता है.

पहली इमेज में दिखाया गया है कि मैग्निफ़ायर की मदद से, टेक्स्ट को कैसे चुना जा सकता है. मैग्निफ़ायर के एपीआई, टेक्स्ट से जुड़े नहीं होते. इसलिए, इस विजेट का इस्तेमाल कई तरह से किया जा सकता है. जैसे, छोटा टेक्स्ट पढ़ना या मैप पर, ऐसी जगहों के नाम ज़ूम इन करके देखना जिन्हें देखना मुश्किल है.

इस इमेज में दिखाया गया है कि सही सिलेक्शन हैंडल को पकड़ने के बाद, मैग्निफ़ायर कैसा दिखता है
पहली इमेज. टेक्स्ट को ज़ूम इन करना. जब उपयोगकर्ता, दाएं सिलेक्शन हैंडल को खींचता है, तो मैग्निफ़ायर पॉप-अप होता है. इससे कर्सर को सटीक जगह पर रखने में मदद मिलती है.

मैग्निफ़ायर, प्लैटफ़ॉर्म विजेट के साथ पहले से इंटिग्रेट है. जैसे, TextView, EditText, और WebView. इससे, अलग-अलग ऐप्लिकेशन में टेक्स्ट को एक ही तरीके से मैनेज किया जा सकता है. इस विजेट के साथ एक आसान एपीआई मिलता है. इसका इस्तेमाल, आपके ऐप्लिकेशन के कॉन्टेक्स्ट के हिसाब से किसी भी View को ज़ूम इन करने के लिए किया जा सकता है.

एपीआई का इस्तेमाल करना

किसी भी व्यू पर, मैग्निफ़ायर को प्रोग्राम के ज़रिए इस तरह इस्तेमाल किया जा सकता है:

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();

उपयोगकर्ता के इंटरैक्शन पर ज़ूम इन करना

मैग्निफ़ायर का एक सामान्य इस्तेमाल यह है कि उपयोगकर्ता किसी व्यू के हिस्से को टच करके बड़ा कर सके. जैसा कि दूसरी इमेज में दिखाया गया है.

दूसरी इमेज. मैग्निफ़ायर, उपयोगकर्ता के टच के साथ-साथ चलता है. इसे 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 प्लैटफ़ॉर्म पर, अपने कस्टम टेक्स्ट व्यू के लिए मैग्निफ़ायर को लगातार चालू रखना ज़रूरी है. इसके लिए, इन्हें आज़माएं:

  • जब उपयोगकर्ता, कर्सर को सटीक जगह पर रखने या सिलेक्शन हैंडल को पकड़ता है, तो मैग्निफ़ायर तुरंत ट्रिगर हो जाता है.
  • मैग्निफ़ायर, उपयोगकर्ता की उंगली के साथ-साथ हॉरिज़ॉन्टली चलता है. वहीं, वर्टिकल तौर पर यह मौजूदा टेक्स्ट लाइन के बीच में फ़िक्स रहता है.
  • हॉरिज़ॉन्टली मूव करते समय, मैग्निफ़ायर सिर्फ़ मौजूदा लाइन की बाईं और दाईं सीमाओं के बीच ही मूव करता है. इसके अलावा, जब उपयोगकर्ता का टच इन सीमाओं से बाहर चला जाता है और टच और सबसे नज़दीकी सीमा के बीच की हॉरिज़ॉन्टल दूरी, मैग्निफ़ायर कॉन्टेंट की ओरिजनल चौड़ाई के आधे से ज़्यादा होती है, तो मैग्निफ़ायर खारिज हो जाता है. ऐसा इसलिए होता है, क्योंकि कर्सर अब मैग्निफ़ायर के अंदर नहीं दिखता.
  • जब टेक्स्ट का फ़ॉन्ट बहुत बड़ा होता है, तो मैग्निफ़ायर कभी ट्रिगर नहीं होता. टेक्स्ट को तब बहुत बड़ा माना जाता है, जब फ़ॉन्ट के डिसेंट और एसेंट के बीच का अंतर, मैग्निफ़ायर में फ़िट होने वाले कॉन्टेंट की ऊंचाई से ज़्यादा होता है. इस स्थिति में, मैग्निफ़ायर को ट्रिगर करने से कोई फ़ायदा नहीं होता.