Keyboard Type — پیکربندی صفحهکلید مجازی در Android است که مجموعه کاراکترهای نمایش داده شده و چیدمان را برای یک فیلد ورودی خاص تعیین میکند. Android از انواع از پیش تعیین شده متعددی پشتیبانی میکند: text (متن استاندارد)، number (عددی)، phone (تلفنی)، email (با علامت @)، textPassword (برای رمزهای عبور)، datetime و موارد دیگر. هر نوع رابط ورودی را برای یک وظیفه خاص بهینه میکند — برای مثال، صفحهکلید email علامت @ و نقطه را در صفحه اصلی نشان میدهد. طبق دادههای Android Developers (2026)، انتخاب صحیح Keyboard Type تعداد ضربات هنگام ورود را ۲۰–۴۰٪ در مقایسه با صفحهکلید متنی استاندارد کاهش میدهد.
نکات اصلی
Keyboard Type با مقدار ویژگی android:inputType در XML یا فراخوانی برنامهای setInputType() در کد تعیین میشود. InputType یک ماسک بیتی است که در آن کلاس ورودی (کلاس) با پرچمهای اصلاحکننده ترکیب میشود. کلاسهای پایه: TYPE_CLASS_TEXT برای متن، TYPE_CLASS_NUMBER برای اعداد، TYPE_CLASS_PHONE برای تلفنها، TYPE_CLASS_DATETIME برای تاریخ و زمان.
هر Keyboard Type بر سه جنبه تأثیر میگذارد: چیدمان صفحهکلید مجازی (کدام کاراکترها در صفحه اصلی دیده میشوند)، فیلتر کردن کاراکترهای وارد شده (کدام کاراکترها مجاز هستند) و رفتار تصحیح خودکار/تکمیل خودکار. برای مثال، صفحهکلید number فقط اعداد و جداکننده اعشاری را نمایش میدهد و حتی اگر کاربر حالت را تغییر دهد، حروف را نشان نمیدهد. طبق دادههای Android Developers Documentation (2026)، ترکیب کلاسها با پرچمها امکان ایجاد حالتهای بسیار تخصصی را فراهم میکند: متن چندخطی با تصحیح خودکار، عدد اعشاری، رمز عبور با قابلیت تکمیل خودکار.
درک این نکته مهم است که Keyboard Type یک توصیه به سیستم ورودی (IME) است. برخی صفحهکلیدهای شخص ثالث (Gboard, SwiftKey) ممکن است اگر کاربر ترجیحات خود را تنظیم کرده باشد، نوع مشخص شده را تا حدی نادیده بگیرند. با این حال، اکثر صفحهکلیدهای استاندارد Android و Google Gboard به شدت از نوع ورودی مشخص شده پیروی میکنند.
// تنظیم برنامهای نوع صفحهکلید
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT — کلاس پایه برای ورود متن. این کلاس صفحهکلید استاندارد QWERTY با حروف، اعداد و نمادها را فعال میکند. کلاس Text بیشترین تعداد اصلاحکننده را دارد که رفتار را دقیقتر میکند: TYPE_TEXT_FLAG_CAP_SENTENCES (حرف بزرگ خودکار در ابتدای جمله)، TYPE_TEXT_FLAG_AUTO_CORRECT (تصحیح خودکار)، TYPE_TEXT_FLAG_MULTI_LINE (حالت چندخطی)، TYPE_TEXT_FLAG_NO_SUGGESTIONS (غیرفعال کردن پیشنهادات).
اصلاحکنندههای صفحهکلید متنی را میتوان ترکیب کرد و یک پیکربندی دقیق ایجاد کرد: برای مثال، text|textCapSentences|textAutoCorrect برای فیلد ورود نظر مناسب است، جایی که حرف بزرگ خودکار و تصحیح اشتباهات تایپی لازم است. در حالی که text|textNoSuggestions برای ورود کد یا اصطلاحات تخصصی استفاده میشود، جایی که تصحیح خودکار میتواند مضر باشد.
طبق دادههای UX Stack Exchange (2025)، صفحهکلید متنی با تصحیح خودکار فعال، ورود را برای کاربر متوسط ۱۵–۲۵٪ تسریع میکند، اما برای اصطلاحات فنی (کد، URL، email) توصیه میشود تصحیح خودکار را غیرفعال کنید، زیرا اغلب اصطلاحات صحیح را با اصطلاحات نادرست جایگزین میکند.
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER صفحهکلید عددی را فعال میکند که فقط اعداد، جداکننده اعشاری و علامت منفی را نمایش میدهد. این نوع برای فیلدهای ورود مقدار، قیمت، سن، کدها و سایر دادههای عددی استفاده میشود. صفحهکلید عددی فضای کمتری روی صفحه نسبت به صفحهکلید متنی اشغال میکند و ورود تصادفی حروف را حذف میکند.
Number دارای سه اصلاحکننده است: TYPE_NUMBER_FLAG_DECIMAL نقطه/ویرگول اعشاری را اضافه میکند، TYPE_NUMBER_FLAG_SIGNED علامت منفی را برای اعداد منفی اضافه میکند، TYPE_NUMBER_VARIATION_PASSWORD — برای PIN-کدها، جایی که اعداد به صورت کاراکترهای مخفی نمایش داده میشوند. ترکیب number|numberDecimal|numberSigned یک فیلد کامل برای ورود اعداد اعشاری با هر علامتی ایجاد میکند.
// ورود عددی با نقطه اعشاری
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// عدد وارد شده را بررسی کنید
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE صفحهکلید تلفنی را فعال میکند که اعداد و نمادهای مشخصه شماره تلفنها را نمایش میدهد: +, #, *, (, ). برخلاف صفحهکلید number، phone همچنین چیدمان حروف را در حالت اضافی نشان میدهد، زیرا شماره تلفنها ممکن است حاوی حروف باشند (مثلاً ۱-۸۰۰-FLOWERS). کلاس phone پرچمهای اضافی ندارد، اما از TYPE_TEXT_VARIATION_PHONE_ETC برای وارد کردن شمارههای داخلی پشتیبانی میکند.
TYPE_TEXT_VARIATION_EMAIL_ADDRESS صفحهکلید email را فعال میکند، که در آن علامت @ و نقطه در صفحه اصلی قرار دارند و همچنین پسوندهای دامنه رایج (.com, .net, .org) در دسترس هستند. Gboard علاوه بر این دکمههایی با دامنههای محبوب هنگام ورود بعد از @ نشان میدهد. صفحهکلید email به طور خودکار تصحیح خودکار را غیرفعال میکند، زیرا آدرسهای email ممکن است حاوی ترکیبات غیراستاندارد کاراکترها باشند.
طبق دادههای Google Material Design Guidelines (2025)، برای فیلدهای تلفن توصیه میشود علاوه بر این ویژگی android:digits را مشخص کنید که مجموعه کاراکترهای مجاز را محدود میکند. برای فیلدهای email همچنین مشخص کردن autofillHints="email" برای پشتیبانی از تکمیل خودکار توسط مدیر رمز عبور و Google Autofill مهم است.
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"
<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"
TYPE_TEXT_VARIATION_PASSWORD و TYPE_NUMBER_VARIATION_PASSWORD — حالتهای ورود برای دادههای محرمانه هستند. هنگام تنظیم textPassword، کاراکترهای وارد شده به صورت نقطه یا ستاره نمایش داده میشوند (بسته به نسخه Android و صفحهکلید). صفحهکلید در این حالت تصحیح خودکار و ذخیره کلمات وارد شده در فرهنگ لغت کاربر را غیرفعال میکند و از نشت رمز عبور از طریق ویژگیهای ورود پیشبینیکننده جلوگیری میکند.
Password صفحهکلید همچنین امکان گرفتن اسکرینشات از محتوای فیلد را غیرفعال میکند (پرچم FLAG_SECURE)، اگرچه این رفتار به پیادهسازی صفحهکلید خاص بستگی دارد. از Android 8.0 (API 26) به بعد، صفحهکلیدهای password از تکمیل خودکار از طریق مدیران رمز عبور پشتیبانی میکنند، اگر ویژگی importantForAutofill="yes" تنظیم شده باشد.
طبق دادههای Android Security Recommendations (2025)، برای فیلدهای رمز عبور همچنین توصیه میشود: تنظیم maxLength برای جلوگیری از رمزهای عبور بسیار طولانی (که میتوانند حمله به پایگاه داده باشند)، استفاده از inputType="textPassword" همراه با TextInputLayout و endIconMode="password_toggle" تا کاربر بتواند قبل از ارسال فرم، رمز عبور وارد شده را بررسی کند.
<!-- Password field with show/hide icon -->
@+id/tilPasswordField
app:endIconMode="password_toggle">
@+id/etPasswordField
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />
</com.google.android.material.textfield.TextInputLayout>
تنظیم برنامهای Keyboard Type امکان تغییر پویای حالت صفحهکلید را بسته به زمینه یا ورودی کاربر فراهم میکند. برای مثال، هنگام تغییر نوع فیلد (متن/عدد/تاریخ) یا هنگام تغییر locale. متد setInputType() ماسک بیتی InputType را میپذیرد و اگر فیلد در فوکس باشد، بلافاصله صفحهکلید را بهروزرسانی میکند.
// تغییر بین ورود متن و عدد
fun switchInputType(field: EditText, isNumeric: Boolean) {
field.inputType = if (isNumeric) {
InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
}
field.setSelection(field.text.length)
}
// بررسی عددی بودن فیلد
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// بررسی فعال بودن تصحیح خودکار
fun isAutoCorrectEnabled(field: EditText): Boolean {
return (field.inputType and
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}
سوالات متداول
اگر inputType مشخص نشده باشد، EditText به طور پیشفرض از TYPE_CLASS_TEXT با پرچم TYPE_TEXT_FLAG_MULTI_LINE استفاده میکند. این به معنای صفحهکلید استاندارد QWERTY و ورود چندخطی است. برای اکثر فیلدها توصیه میشود inputType را به صراحت مشخص کنید تا رفتار صحیح صفحهکلید و فیلتر کاراکترها تضمین شود.
از ویژگی android:imeOptions="actionDone" روی EditText استفاده کنید. این کار دکمه Enter را با دکمه Done جایگزین میکند. گزینههای دیگر: actionSearch (ذرهبین)، actionNext (فلش راست)، actionSend (ارسال). پردازش فشار را از طریق OnEditorActionListener در کد پیادهسازی کنید.
نمیتوان لرزش را برای یک فیلد خاص غیرفعال کرد — این یک تنظیم سیستم است که توسط کاربر در تنظیمات صفحهکلید مدیریت میشود. با این حال، میتوان با تنظیم ویژگی android:focusable="false" روی EditText یا لغو نمایش از طریق dispatchTouchEvent، از ظاهر شدن کامل صفحهکلید جلوگیری کرد.
android:inputType="none" را تنظیم کنید یا به صورت برنامهای editText.setKeyListener(null) را فراخوانی کنید. فیلد متن را نمایش میدهد، اما صفحهکلید در فوکس ظاهر نمیشود. کاربر میتواند متن را انتخاب و کپی کند، اما نمیتواند آن را تغییر دهد. جایگزین — استفاده از TextView با textIsSelectable="true".
پس از فراخوانی setInputType() باید صفحهکلید را دوباره نشان دهید، زیرا سیستم ممکن است IME را به طور خودکار بهروزرسانی نکند. InputMethodManager.restartInput(view) را برای بهروزرسانی اجباری فراخوانی کنید. اگر فیلد در فوکس نیست، ابتدا requestFocus() و سپس restartInput را فراخوانی کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید