ورودی قلم در فیلدهای نوشتاری

امتحان کردن روش Compose
Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه کار با قلم در Compose آشنا شوید.

Android 14 (سطح میانای برنامه‌سازی کاربردی ۳۴) و بالاتر به کاربران امکان می‌دهد بااستفاده از قلم در هر فیلد ورودی نوشتاری در هر برنامه‌ای بنویسند. فیلدهای ورودی نوشتار Android، ازجمله مؤلفه‌های EditText و ابزاره‌های نوشتاری WebView، به‌طور پیش‌فرض از ورودی قلم پشتیبانی می‌کنند.

بااین‌حال، اگر برنامه‌تان به فیلدهای ورودی نوشتار سفارشی نیاز دارد (به ویرایشگرهای نوشتار سفارشی مراجعه کنید) یا دارای چیدمان پیچیده‌ای با فیلدهای ورودی نوشتار است که روی سطح طراحی قرار می‌گیرند، باید برنامه‌تان را سفارشی‌سازی کنید.

شکل ۱. ورودی دست‌نویس با قلم.

EditText

دست‌نویسی با قلم به‌طور پیش‌فرض برای همه فیلدهای EditText در Android 14 و نسخه‌های بالاتر فعال است. حالت دست‌نویس برای EditText زمانی شروع می‌شود که رویداد حرکت قلم در محدوده دست‌نویس نما شناسایی شود.

مرزهای دست‌نویس شامل ۴۰ dp حاشیه داخلی عمودی و ۱۰ dp حاشیه داخلی افقی در اطراف نما است. تنظیم کردن مرزهای دست‌نویس با setHandwritingBoundsOffsets(). غیرفعال کردن دست‌نویسی با setAutoHandwritingEnabled(false).

فیلد ورودی با مستطیل اطراف که مرزهای تشخیص رویدادهای حرکت قلم را نشان می‌دهد.
شکل ۲. محدوده‌های دست‌نویسی EditText فیلد.

واگذاری ورودی

برنامه‌ها می‌توانند عناصر میانای کاربر جای‌بان را نمایش دهند که به‌نظر می‌رسد فیلدهای ورودی نوشتار هستند اما درواقع فقط عناصر میانای کاربر ایستا هستند و قابلیت ورودی نوشتار ندارند. فیلدهای جستجو نمونه‌ای رایج هستند. تک‌ضرب زدن روی عنصر میانای کاربر ایستا باعث انتقال به میانای کاربر جدیدی می‌شود که حاوی فیلد ورودی نوشتار کاربردی متمرکز برای ورودی است.

شکل ۳. واگذاری ورودی از عنصر میانای کاربر ایستا به فیلد ورودی نوشتار.

واگذاری ورودی قلم

برای پشتیبانی از ورودی دست‌نویسی با قلم برای فیلدهای ورودی جای‌بان، از میاناهای برنامه‌سازی کاربردی واگذاری دست‌نویسی استفاده کنید (به setHandwritingDelegatorCallback() و setIsHandwritingDelegate() مراجعه کنید). عنصر میانای کاربر جای‌بان به‌گونه‌ای پیکربندی شده است که دست‌نویسی را به فیلد ورودی کاربردی واگذار کند، برای مثال:

کاتلین

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback {
        showAndFocusDelegateInputField()
    }
    delegateInputField.setIsHandwritingDelegate(true)
}

جاوا

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback(this::showAndFocusInputFieldDelegate);
    delegateInputField.setIsHandwritingDelegate(true);
}

حرکت قلم روی نمای فیلد ورودی نوشتار جانگهدار، فراخوانی برگشتی را فرا می‌خواند. فراخوانی برگشتی انتقال میانای کاربری را برای نمایش و تمرکز روی فیلد ورودی کاربردی راه‌اندازی می‌کند. پیاده‌سازی فراخوانی برگشتی معمولاً همانند پیاده‌سازی برای شنونده کلیک در عنصر جای‌بان است. وقتی فیلد ورودی کاربردی InputConnection ایجاد می‌کند، حالت دست‌نویس با قلم شروع می‌شود.

شکل ۴. واگذاری ورودی قلم از عنصر میانای کاربر ایستا به فیلد ورودی نوشتار.

طراحی سه‌بعدی

کتابخانه com.google.android.material.search کلاس‌های SearchBar و SearchView را برای تسهیل پیاده‌سازی الگوی واسط کاربر جای‌بان ارائه می‌دهد.

نماهای جستجوی جای‌بان و کاربردی با setUpWithSearchBar() پیوند شده است.

واگذاری دست‌نویس در کتابخانه Material پیکربندی شده است و به توسعه اضافی در برنامه‌تان نیاز ندارد.

هم‌پوشانی با سطوح طراحی

اگر برنامه‌تان سطح طراحی‌ای دارد که فیلد نوشتاری روی آن قرار گرفته است، ممکن است لازم باشد دست‌نویسی با قلم را غیرفعال کنید تا کاربر بتواند طراحی کند. setAutoHandwritingEnabled() را ببینید.

آزمایش

دست‌نویسی با قلم در دستگاه‌های دارای Android 14 و بالاتر که دستگاه ورودی قلم سازگار و ویرایشگر روش ورودی (IME) سازگار با میاناهای برنامه‌سازی کاربردی دست‌نویسی با قلم Android 14 دارند پشتیبانی می‌شود.

اگر دستگاه ورودی قلم ندارید، ورودی قلم را در هر دستگاهی با دسترسی ریشه‌ای (ازجمله شبیه‌سازها) بااستفاده از دستورات «پل اشکال‌زدایی Android»‏ (adb) زیر شبیه‌سازی کنید:


// Android 14
adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start

// Android 15 and higher
// Property takes effect after screen reconfiguration such as orientation change.
adb shell setprop debug.input.simulate_stylus_with_touch true

اگر از دستگاهی استفاده می‌کنید که از قلم پشتیبانی نمی‌کند، از Gboard بتا برای آزمایش استفاده کنید.

منابع بیشتر