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

روش Compose را امتحان کنید
Jetpack Compose جعبه ابزار UI توصیه شده برای اندروید است. نحوه استفاده از متن در Compose را بیاموزید.

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

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

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

ذره بین از قبل با ویجت های پلتفرم مانند 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 اولین طرح را داشته باشد، ذره بین روی صفحه نمایش داده می شود و شامل یک ناحیه متمرکز بر مختصات داده شده در نمای است. صفحه در بالای نقطه مرکزی محتوای در حال کپی ظاهر می شود. ذره بین به طور نامحدود باقی می ماند تا زمانی که کاربر آن را رد کند.

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

کاتلین

view.setBackgroundColor(...)

جاوا

view.setBackgroundColor(...);

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

کاتلین

view.post { magnifier.update() }

جاوا

view.post(magnifier::update);

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

کاتلین

magnifier.dismiss()

جاوا

magnifier.dismiss();

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

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

شکل 2. ذره بین لمس کاربر را دنبال می کند. روی یک ViewGroup اعمال می شود که شامل «ImageView» در سمت چپ و TextView در سمت راست است.

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

کاتلین

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

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

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

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