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

کتابخانه‌ی Jetpack androidx.compose.material3 به کاربران این امکان را می‌دهد که با استفاده از قلم استایلوس، در هر کامپوننت TextField در هر برنامه‌ای بنویسند.

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

برای فعال کردن ورودی قلم به صورت پیش‌فرض، وابستگی کتابخانه را به فایل build.gradle برنامه خود اضافه کنید:

dependencies {
    implementation("androidx.compose.foundation:foundation:LATEST_COMPOSE_VERSION")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "LATEST_EXTENSION_VERSION"
    }

    kotlinOptions {
        jvmTarget = "LATEST_JVM_VERSION"
    }
}
dependencies {
    implementation 'androidx.compose.foundation:foundation:LATEST_COMPOSE_VERSION'
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = 'LATEST_EXTENSION_VERSION'
    }

    kotlinOptions {
        jvmTarget = 'LATEST_JVM_VERSION'
    }
}

TextField

قابلیت نوشتن با قلم نوری (Stylus handwriting) به طور پیش‌فرض برای همه کامپوننت‌های TextField در اندروید ۱۴ و بالاتر و وابستگی androidx.compose.foundation:foundation:1.7.0 فعال است. حالت نوشتن با قلم نوری برای یک TextField زمانی فعال می‌شود که یک رویداد حرکت قلم نوری در محدوده دست‌نویس کامپوننت شناسایی شود.

محدوده‌های دست‌نویس شامل ۴۰ dp فاصله عمودی و ۱۰ dp فاصله افقی در اطراف فیلد ورودی است.

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

دستخط Stylus برای فیلدهای TextField پشتیبانی نمی‌شود، زمانی که ویرایشگر روش ورودی با KeyboardType.Password درخواست می‌شود.

تفویض ورودی

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

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

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

از APIهای واگذاری دست‌خط برای پشتیبانی از ورودی دست‌خط قلم برای فیلدهای ورودی نگهدارنده مکان استفاده کنید (به handwritingDetector و handwritingHandler مراجعه کنید). عنصر رابط کاربری نگهدارنده مکان برای واگذاری دست‌خط به یک فیلد ورودی کاربردی پیکربندی شده است. برای یک پیاده‌سازی نمونه، به HandwritingDetectorSample.kt مراجعه کنید.

حالت دست‌نویس قلم زمانی شروع می‌شود که فیلد ورودی عملکردی فوکوس را به دست می‌آورد و یک InputConnection ایجاد می‌کند.

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

آزمایش

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

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

منابع اضافی