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

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

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

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

EditText

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

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

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

تفویض اختیار ورودی

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

شکل 3. انتقال ورودی از عنصر UI ثابت به فیلد ورودی متن.

انتقال ورودی قلم

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

کاتلین

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

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

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

طراحی متریال

کتابخانه com.google.android.material.search کلاس های SearchBar و SearchView را برای تسهیل اجرای الگوی UI مکان نگهدار فراهم می کند.

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

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

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

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

تست کردن

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

اگر دستگاه ورودی قلم ندارید، با استفاده از دستورات Android Debug Bridge (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 بتا برای آزمایش استفاده کنید.

منابع اضافی