Keyboard Type — nó là gì, các loại bàn phím và cấu hình đầu vào trong Android

Tác giả: IT Sectr Đã đăng: 2026-07-07 Thời gian đọc: 9 phút

Keyboard Type là cấu hình bàn phím ảo trong Android xác định tập hợp các ký tự hiển thị và bố cục cho một trường nhập cụ thể. Android hỗ trợ nhiều loại được cài đặt sẵn: text (văn bản tiêu chuẩn), number (số), phone (điện thoại), email (với ký hiệu @), textPassword (cho mật khẩu), datetime và các loại khác. Mỗi loại tối ưu giao diện nhập cho một nhiệm vụ cụ thể — ví dụ, bàn phím email hiển thị ký hiệu @ và dấu chấm trên màn hình chính. Theo Android Developers (2026), việc chọn đúng Keyboard Type giảm số lần gõ phím từ 20–40% so với bàn phím văn bản tiêu chuẩn.

Các Điểm Chính

  • Keyboard Type — chế độ bàn phím được xác định bởi thuộc tính android:inputType trong Android.
  • Các loại chính — text, number, phone, email, textPassword, datetime cho các kịch bản nhập khác nhau.
  • Tối ưu hóa nhập — loại bàn phím chính xác tăng tốc điền biểu mẫu lên 20–40%.
  • Kết hợp cờ — inputType kết hợp lớp nhập và bộ sửa đổi (nhiều dòng, tự động sửa).
  • Tùy chọn IME — thuộc tính imeOptions điều khiển nút hành động trên bàn phím (Done, Search, Next).

Keyboard Type trong Android là gì

Keyboard Type được xác định bởi giá trị thuộc tính android:inputType trong XML hoặc bằng cách gọi setInputType() theo chương trình trong mã. InputType là mặt nạ bit nơi lớp nhập được kết hợp với các cờ sửa đổi. Các lớp cơ bản là: TYPE_CLASS_TEXT cho văn bản, TYPE_CLASS_NUMBER cho số, TYPE_CLASS_PHONE cho điện thoại, TYPE_CLASS_DATETIME cho ngày và giờ.

Mỗi Keyboard Type ảnh hưởng đến ba khía cạnh: bố cục bàn phím ảo (ký tự nào hiển thị trên màn hình chính), lọc các ký tự được nhập (ký tự nào được phép) và hành vi tự động sửa/tự động hoàn thành. Ví dụ, bàn phím số chỉ hiển thị chữ số và dấu phân cách thập phân, và nó không hiển thị chữ cái ngay cả khi người dùng chuyển đổi chữ hoa/chữ thường. Theo Android Developers Documentation (2026), việc kết hợp các lớp với các cờ cho phép tạo các chế độ chuyên biệt cao: văn bản nhiều dòng với tự động sửa, số dấu phẩy động, mật khẩu với hỗ trợ tự động điền.

Điều quan trọng là hiểu rằng Keyboard Type là một đề xuất cho hệ thống nhập (IME). Một số bàn phím của bên thứ ba (Gboard, SwiftKey) có thể bỏ qua một phần loại được chỉ định nếu người dùng đã đặt tùy chọn riêng của họ. Tuy nhiên, hầu hết các bàn phím Android tiêu chuẩn và Google Gboard tuân thủ nghiêm ngặt loại nhập được chỉ định.

kotlin
// Thiết lập loại bàn phím theo chương trình
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL or
    InputType.TYPE_NUMBER_FLAG_SIGNED

Text — bàn phím văn bản tiêu chuẩn

TYPE_CLASS_TEXT là lớp cơ bản cho nhập văn bản. Nó kích hoạt bàn phím QWERTY tiêu chuẩn với chữ cái, chữ số và ký hiệu. Lớp văn bản có nhiều bộ sửa đổi nhất giúp tinh chỉnh hành vi: TYPE_TEXT_FLAG_CAP_SENTENCES (chữ hoa tự động ở đầu câu), TYPE_TEXT_FLAG_AUTO_CORRECT (tự động sửa), TYPE_TEXT_FLAG_MULTI_LINE (chế độ nhiều dòng), TYPE_TEXT_FLAG_NO_SUGGESTIONS (tắt gợi ý).

Các bộ sửa đổi của bàn phím văn bản có thể được kết hợp để tạo các cấu hình chính xác: ví dụ, text|textCapSentences|textAutoCorrect phù hợp cho trường nhập bình luận nơi cần chữ hoa tự động và sửa lỗi chính tả. Trong khi đó, text|textNoSuggestions được sử dụng để nhập mã hoặc thuật ngữ đặc biệt nơi tự động sửa có thể gây hại.

Theo UX Stack Exchange (2025), bàn phím văn bản với tự động sửa được bật giúp tăng tốc gõ phím 15–25% cho người dùng trung bình, nhưng đối với các thuật ngữ kỹ thuật (mã, URL, email), nên tắt tự động sửa vì nó thường thay thế các thuật ngữ chính xác bằng các thuật ngữ không chính xác.

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

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

Number — bàn phím số

TYPE_CLASS_NUMBER kích hoạt bàn phím số, chỉ hiển thị chữ số, dấu phân cách thập phân và dấu trừ. Loại này được sử dụng cho các trường nhập số lượng, giá cả, tuổi, mã và dữ liệu số khác. Bàn phím số chiếm ít không gian màn hình hơn bàn phím văn bản và loại bỏ việc nhập chữ cái vô tình.

Number có ba bộ sửa đổi: TYPE_NUMBER_FLAG_DECIMAL thêm dấu chấm/phẩy thập phân, TYPE_NUMBER_FLAG_SIGNED thêm dấu trừ cho số âm, TYPE_NUMBER_VARIATION_PASSWORD — cho mã PIN nơi chữ số được hiển thị dưới dạng ký tự ẩn. Sự kết hợp number|numberDecimal|numberSigned tạo một trường đầy đủ để nhập số dấu phẩy động của bất kỳ dấu nào.

  • number — số nguyên dương (tuổi, số lượng sản phẩm).
  • numberDecimal — số có phần thập phân (giá, cân nặng, chiều cao).
  • numberSigned — số có dấu (nhiệt độ, tọa độ).
  • numberPassword — nhập chữ số ẩn cho mã PIN.
kotlin
// Nhập số với dấu thập phân
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// Kiểm tra số đã nhập
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0

Phone và Email — bàn phím chuyên dụng

TYPE_CLASS_PHONE kích hoạt bàn phím điện thoại, hiển thị chữ số và các ký tự điển hình cho số điện thoại: +, #, *, (, ). Không giống bàn phím số, phone cũng hiển thị bố cục chữ trong chế độ bổ sung, vì số điện thoại có thể chứa chữ cái (ví dụ, 1-800-FLOWERS). Lớp phone không có cờ bổ sung nhưng hỗ trợ TYPE_TEXT_VARIATION_PHONE_ETC để nhập số máy lẻ.

TYPE_TEXT_VARIATION_EMAIL_ADDRESS kích hoạt bàn phím email, nơi ký hiệu @ và dấu chấm ở trên màn hình chính, và các phần mở rộng tên miền phổ biến (.com, .net, .org) cũng có sẵn. Gboard hiển thị thêm các nút với tên miền phổ biến khi nhập sau @. Bàn phím email tự động tắt tự động sửa vì địa chỉ email có thể chứa các tổ hợp ký tự không tiêu chuẩn.

Theo Google Material Design Guidelines (2025), cho trường điện thoại, nên chỉ định thêm thuộc tính android:digits, giới hạn tập hợp các ký tự được phép. Cho trường email, cũng quan trọng là chỉ định autofillHints="email" để hỗ trợ tự động điền từ trình quản lý mật khẩu và 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 — bàn phím cho mật khẩu

TYPE_TEXT_VARIATION_PASSWORDTYPE_NUMBER_VARIATION_PASSWORD là các chế độ nhập cho dữ liệu nhạy cảm. Khi textPassword được đặt, các ký tự được nhập sẽ hiển thị dưới dạng dấu chấm hoặc dấu hoa thị (tùy thuộc vào phiên bản Android và bàn phím). Bàn phím trong chế độ này tắt tự động sửa và lưu các từ đã nhập vào từ điển người dùng, ngăn chặn rò rỉ mật khẩu qua các tính năng nhập dự đoán.

Bàn phím Password cũng tắt khả năng chụp ảnh màn hình nội dung trường (cờ FLAG_SECURE), mặc dù hành vi này phụ thuộc vào triển khai cụ thể của bàn phím. Bắt đầu từ Android 8.0 (API 26), bàn phím mật khẩu hỗ trợ tự động điền qua trình quản lý mật khẩu nếu thuộc tính importantForAutofill="yes" được đặt.

Theo Android Security Recommendations (2025), cho trường mật khẩu, cũng nên: đặt maxLength để ngăn mật khẩu quá dài (có thể là vector tấn công cơ sở dữ liệu), sử dụng inputType="textPassword" cùng với TextInputLayout và endIconMode="password_toggle" để người dùng có thể kiểm tra mật khẩu đã nhập trước khi gửi biểu mẫu.

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>

Thiết lập Keyboard Type trong mã

Việc thiết lập theo chương trình Keyboard Type cho phép thay đổi chế độ bàn phím một cách động tùy theo ngữ cảnh hoặc đầu vào của người dùng. Ví dụ, khi chuyển đổi loại trường (văn bản/số/ngày) hoặc khi thay đổi ngôn ngữ. Phương thức setInputType() chấp nhận mặt nạ bit InputType và cập nhật ngay lập tức bàn phím nếu trường đang được focus.

Chuyển đổi loại động

kotlin
// Chuyển đổi giữa nhập văn bản và số
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)
}

Kiểm tra loại hiện tại

kotlin
// Kiểm tra xem trường có phải là số không
fun isNumericInput(field: EditText): Boolean {
    val type = field.inputType
    return (type and InputType.TYPE_MASK_CLASS) ==
        InputType.TYPE_CLASS_NUMBER
}

// Kiểm tra xem tự động sửa có được bật không
fun isAutoCorrectEnabled(field: EditText): Boolean {
    return (field.inputType and
        InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}

Câu hỏi thường gặp

Điều gì xảy ra nếu không chỉ định Keyboard Type?

Nếu inputType không được chỉ định, EditText mặc định sử dụng TYPE_CLASS_TEXT với cờ TYPE_TEXT_FLAG_MULTI_LINE. Điều này có nghĩa là bàn phím QWERTY tiêu chuẩn và nhập nhiều dòng. Đối với hầu hết các trường, nên chỉ định inputType rõ ràng để đảm bảo hành vi bàn phím chính xác và lọc ký tự.

Làm thế nào để tạo bàn phím với nút "Xong" thay vì "Enter"?

Sử dụng thuộc tính android:imeOptions="actionDone" trên EditText. Điều này sẽ thay thế nút Enter bằng nút Xong. Các tùy chọn khác: actionSearch (kính lúp), actionNext (mũi tên phải), actionSend (gửi). Xử lý nhấn thông qua OnEditorActionListener trong mã.

Có thể tắt rung bàn phím cho một trường cụ thể không?

Không thể tắt rung cho một trường cụ thể — đây là cài đặt hệ thống do người dùng kiểm soát trong cài đặt bàn phím. Tuy nhiên, bạn có thể ngăn bàn phím xuất hiện hoàn toàn bằng cách đặt thuộc tính android:focusable="false" trên EditText hoặc ghi đè hiển thị qua dispatchTouchEvent.

Làm thế nào để tạo trường chỉ đọc có khả năng sao chép văn bản?

Đặt android:inputType="none" hoặc gọi theo chương trình editText.setKeyListener(null). Trường sẽ hiển thị văn bản, nhưng bàn phím sẽ không xuất hiện khi focus. Người dùng có thể chọn và sao chép văn bản, nhưng không thể chỉnh sửa nó. Một giải pháp thay thế là sử dụng TextView với textIsSelectable="true".

Tại sao bàn phím không thay đổi sau setInputType()?

Sau khi gọi setInputType(), bạn cần hiển thị lại bàn phím, vì hệ thống có thể không tự động cập nhật IME. Gọi InputMethodManager.restartInput(view) để buộc cập nhật. Nếu trường không được focus, trước tiên hãy gọi requestFocus(), sau đó restartInput.

Tóm tắt

  • Keyboard Type xác định bố cục, bộ lọc và hành vi của bàn phím cho trường nhập Android.
  • text — bàn phím QWERTY tiêu chuẩn với bộ sửa đổi cho tự động sửa, viết hoa và nhiều dòng.
  • number — bàn phím số cho số nguyên và số thập phân với các tùy chọn signed và decimal.
  • phone — bàn phím điện thoại với chữ số, +, #, * và hỗ trợ số chữ số.
  • email — bàn phím với @, dấu chấm và truy cập nhanh đến phần mở rộng tên miền.
  • textPassword — nhập ẩn với tự động sửa và lưu từ điển bị tắt.
  • imeOptions cấu hình nút hành động trên bàn phím: Done, Search, Next, Send.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm