Keyboard Type — چیست، انواع صفحه‌کلید و تنظیم ورودی در Android

نویسنده: IT Sectr منتشر شده: 2026-07-07 زمان مطالعه: 9 دقیقه

Keyboard Type — پیکربندی صفحه‌کلید مجازی در Android است که مجموعه کاراکترهای نمایش داده شده و چیدمان را برای یک فیلد ورودی خاص تعیین می‌کند. Android از انواع از پیش تعیین شده متعددی پشتیبانی می‌کند: text (متن استاندارد)، number (عددی)، phone (تلفنی)، email (با علامت @)، textPassword (برای رمزهای عبور)، datetime و موارد دیگر. هر نوع رابط ورودی را برای یک وظیفه خاص بهینه می‌کند — برای مثال، صفحه‌کلید email علامت @ و نقطه را در صفحه اصلی نشان می‌دهد. طبق داده‌های Android Developers (2026)، انتخاب صحیح Keyboard Type تعداد ضربات هنگام ورود را ۲۰–۴۰٪ در مقایسه با صفحه‌کلید متنی استاندارد کاهش می‌دهد.

نکات اصلی

  • Keyboard Type — حالت صفحه‌کلید که توسط ویژگی android:inputType در Android تعیین می‌شود.
  • انواع اصلی — text, number, phone, email, textPassword, datetime برای سناریوهای مختلف ورودی.
  • بهینه‌سازی ورودی — نوع صحیح صفحه‌کلید پر کردن فرم‌ها را ۲۰–۴۰٪ تسریع می‌کند.
  • ترکیب پرچم‌ها — inputType کلاس ورودی و اصلاح‌کننده‌ها (چندخطی، تصحیح خودکار) را ترکیب می‌کند.
  • IME options — ویژگی imeOptions دکمه اقدام روی صفحه‌کلید را مدیریت می‌کند (Done, Search, Next).

Keyboard Type در Android چیست

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 به شدت از نوع ورودی مشخص شده پیروی می‌کنند.

kotlin
// تنظیم برنامه‌ای نوع صفحه‌کلید
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL or
    InputType.TYPE_NUMBER_FLAG_SIGNED

Text — صفحه‌کلید متنی استاندارد

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) توصیه می‌شود تصحیح خودکار را غیرفعال کنید، زیرا اغلب اصطلاحات صحیح را با اصطلاحات نادرست جایگزین می‌کند.

xml
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"

<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"

Number — صفحه‌کلید عددی

TYPE_CLASS_NUMBER صفحه‌کلید عددی را فعال می‌کند که فقط اعداد، جداکننده اعشاری و علامت منفی را نمایش می‌دهد. این نوع برای فیلدهای ورود مقدار، قیمت، سن، کدها و سایر داده‌های عددی استفاده می‌شود. صفحه‌کلید عددی فضای کمتری روی صفحه نسبت به صفحه‌کلید متنی اشغال می‌کند و ورود تصادفی حروف را حذف می‌کند.

Number دارای سه اصلاح‌کننده است: TYPE_NUMBER_FLAG_DECIMAL نقطه/ویرگول اعشاری را اضافه می‌کند، TYPE_NUMBER_FLAG_SIGNED علامت منفی را برای اعداد منفی اضافه می‌کند، TYPE_NUMBER_VARIATION_PASSWORD — برای PIN-کدها، جایی که اعداد به صورت کاراکترهای مخفی نمایش داده می‌شوند. ترکیب number|numberDecimal|numberSigned یک فیلد کامل برای ورود اعداد اعشاری با هر علامتی ایجاد می‌کند.

  • number — اعداد صحیح مثبت (سن، تعداد محصولات).
  • numberDecimal — اعداد با بخش اعشاری (قیمت‌ها، وزن، قد).
  • numberSigned — اعداد با علامت (دما، مختصات).
  • numberPassword — ورود مخفی اعداد برای PIN-کدها.
kotlin
// ورود عددی با نقطه اعشاری
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// عدد وارد شده را بررسی کنید
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0

Phone و Email — صفحه‌کلیدهای تخصصی

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 مهم است.

xml
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"

<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"

Password — صفحه‌کلید برای رمزهای عبور

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

xml
<!-- 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 در کد

تنظیم برنامه‌ای Keyboard Type امکان تغییر پویای حالت صفحه‌کلید را بسته به زمینه یا ورودی کاربر فراهم می‌کند. برای مثال، هنگام تغییر نوع فیلد (متن/عدد/تاریخ) یا هنگام تغییر locale. متد setInputType() ماسک بیتی InputType را می‌پذیرد و اگر فیلد در فوکس باشد، بلافاصله صفحه‌کلید را به‌روزرسانی می‌کند.

تغییر پویای نوع

kotlin
// تغییر بین ورود متن و عدد
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)
}

بررسی نوع فعلی

kotlin
// بررسی عددی بودن فیلد
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
}

سوالات متداول

اگر Keyboard Type مشخص نشود چه اتفاقی می‌افتد؟

اگر inputType مشخص نشده باشد، EditText به طور پیش‌فرض از TYPE_CLASS_TEXT با پرچم TYPE_TEXT_FLAG_MULTI_LINE استفاده می‌کند. این به معنای صفحه‌کلید استاندارد QWERTY و ورود چندخطی است. برای اکثر فیلدها توصیه می‌شود inputType را به صراحت مشخص کنید تا رفتار صحیح صفحه‌کلید و فیلتر کاراکترها تضمین شود.

چگونه صفحه‌کلیدی با دکمه «Done» به جای «Enter» بسازیم؟

از ویژگی 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() تغییر نمی‌کند؟

پس از فراخوانی setInputType() باید صفحه‌کلید را دوباره نشان دهید، زیرا سیستم ممکن است IME را به طور خودکار به‌روزرسانی نکند. InputMethodManager.restartInput(view) را برای به‌روزرسانی اجباری فراخوانی کنید. اگر فیلد در فوکس نیست، ابتدا requestFocus() و سپس restartInput را فراخوانی کنید.

خلاصه

  • Keyboard Type چیدمان، فیلتر و رفتار صفحه‌کلید را برای فیلد ورودی Android تعیین می‌کند.
  • text — صفحه‌کلید استاندارد QWERTY با اصلاح‌کننده‌های تصحیح خودکار، حروف بزرگ و چندخطی.
  • number — صفحه‌کلید عددی برای اعداد صحیح و اعشاری با گزینه signed و decimal.
  • phone — صفحه‌کلید تلفنی با اعداد، +, #, * و پشتیبانی از شماره‌های حرفی.
  • email — صفحه‌کلید با @، نقطه و دسترسی سریع به پسوندهای دامنه.
  • textPassword — ورود مخفی با غیرفعال کردن تصحیح خودکار و ذخیره در فرهنگ لغت.
  • imeOptions دکمه اقدام روی صفحه‌کلید را پیکربندی می‌کند: Done, Search, Next, Send.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید