یک ذره بین متن پیاده سازی کنید

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه از متن در Compose استفاده کنید.

ویجت ذره‌بین که در اندروید ۹ (سطح API 28) و بالاتر موجود است، یک ذره‌بین مجازی است که یک کپی بزرگ‌شده از یک View را از طریق یک قاب رویی که نشان‌دهنده لنز است، نمایش می‌دهد. این ویژگی، تجربه کاربری درج و انتخاب متن را بهبود می‌بخشد. هنگام اعمال ذره‌بین بر روی متن، کاربر می‌تواند با مشاهده متن بزرگ‌شده در قابی که انگشتش را دنبال می‌کند، مکان‌نما یا دستگیره‌های انتخاب را دقیقاً در موقعیت مناسب قرار دهد.

شکل ۱ نشان می‌دهد که چگونه ذره‌بین انتخاب متن را تسهیل می‌کند. APIهای ذره‌بین به متن وابسته نیستند و می‌توانید از این ویجت در موارد استفاده متنوعی مانند خواندن متن‌های کوچک یا بزرگ کردن نام مکان‌های ناخوانا روی نقشه‌ها استفاده کنید.

تصویری که نشان می‌دهد ذره‌بین پس از گرفتن دسته انتخاب سمت راست چگونه ظاهر می‌شود
شکل ۱. بزرگنمایی متن. وقتی کاربر دسته انتخاب سمت راست را می‌کشد، ذره‌بین ظاهر می‌شود تا به قرارگیری دقیق متن کمک کند.

این ابزار بزرگنمایی از قبل با ویجت‌های پلتفرم‌هایی مانند TextView ، EditText و WebView یکپارچه شده است. این ابزار امکان دستکاری متن به صورت یکپارچه را در بین برنامه‌ها فراهم می‌کند. این ابزار با یک API ساده ارائه می‌شود و می‌تواند برای بزرگنمایی هر View بسته به زمینه برنامه شما مورد استفاده قرار گیرد.

استفاده از API

شما می‌توانید از ذره‌بین به صورت برنامه‌نویسی شده روی یک نمای دلخواه به صورت زیر استفاده کنید:

کاتلین

val view: View = findViewById(R.id.view)
val magnifier = Magnifier.Builder(view).build()
magnifier.show(view.width / 2.0f, view.height / 2.0f)

جاوا

View view = findViewById(R.id.view);
Magnifier magnifier = new Magnifier.Builder(view).build();
magnifier.show(view.getWidth() / 2, view.getHeight() / 2);

با فرض اینکه سلسله مراتب نما، طرح‌بندی اول را دارد، ذره‌بین روی صفحه نمایش داده می‌شود و شامل ناحیه‌ای است که در مختصات داده شده در نما متمرکز شده است. این پنجره در بالای نقطه مرکزی محتوای کپی شده ظاهر می‌شود. ذره‌بین تا زمانی که کاربر آن را ببندد، به طور نامحدود باقی می‌ماند.

قطعه کد زیر نحوه تغییر پس‌زمینه نمای بزرگنمایی شده را نشان می‌دهد:

کاتلین

view.setBackgroundColor(...)

جاوا

view.setBackgroundColor(...);

با فرض اینکه رنگ پس‌زمینه در ذره‌بین قابل مشاهده است، محتوای ذره‌بین قدیمی است، زیرا بخشی از نما با پس‌زمینه قدیمی هنوز نمایش داده می‌شود. برای به‌روزرسانی محتوا، از متد update() به صورت زیر استفاده کنید:

کاتلین

view.post { magnifier.update() }

جاوا

view.post(magnifier::update);

پس از اتمام، با فراخوانی متد dismiss() ، ذره‌بین را ببندید:

کاتلین

magnifier.dismiss()

جاوا

magnifier.dismiss();

تعامل کاربر را بزرگنمایی کنید

یک مورد استفاده رایج برای ذره‌بین این است که به کاربر اجازه دهد با لمس کردن یک ناحیه از تصویر، آن را بزرگ کند، همانطور که در شکل ۲ نشان داده شده است.

شکل ۲. ذره‌بین لمس کاربر را دنبال می‌کند. این ذره‌بین به یک ViewGroup اعمال می‌شود که شامل یک `ImageView` در سمت چپ و یک TextView در سمت راست است.

شما می‌توانید این کار را با به‌روزرسانی ذره‌بین بر اساس رویدادهای لمسی دریافت‌شده توسط نما، به شرح زیر انجام دهید:

کاتلین

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
}

جاوا

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

ملاحظات اضافی هنگام بزرگنمایی متن

برای ویجت‌های متنی پلتفرم، درک رفتارهای خاص ذره‌بین و فعال کردن ذره‌بین برای نمایش متن سفارشی شما به طور مداوم در سراسر پلتفرم اندروید، مهم است. موارد زیر را در نظر بگیرید:

  • ذره‌بین بلافاصله زمانی که کاربر یک دستگیره درج یا انتخاب را می‌گیرد، فعال می‌شود.
  • ذره‌بین همیشه به صورت افقی و روان انگشت کاربر را دنبال می‌کند، در حالی که به صورت عمودی در مرکز خط متن فعلی ثابت است.
  • هنگام حرکت افقی، ذره‌بین فقط بین مرزهای چپ و راست خط فعلی حرکت می‌کند. علاوه بر این، هنگامی که لمس کاربر از این مرزها خارج می‌شود و فاصله افقی بین لمس و نزدیکترین مرز بزرگتر از نیمی از عرض اصلی محتوای ذره‌بین باشد، ذره‌بین از بین می‌رود، زیرا مکان‌نما دیگر در داخل ذره‌بین قابل مشاهده نیست.
  • وقتی فونت متن خیلی بزرگ باشد، ذره‌بین هرگز فعال نمی‌شود. متن وقتی خیلی بزرگ در نظر گرفته می‌شود که تفاوت بین پایین و بالا رفتن فونت بیشتر از ارتفاع محتوایی باشد که در ذره‌بین جا می‌شود. فعال کردن ذره‌بین در این حالت ارزشی اضافه نمی‌کند.