Giới thiệu
Ví dụ này minh họa cách thay đổi loại bàn phím (input type) của EditText tại runtime (programmatically) thay vì khai báo trong XML.
Các bước thực hiện
Bước 1: Tạo dự án mới
Android Studio → File → New Project → Empty Activity.
Bước 2: Giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_marginTop="30dp"
android:padding="4dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="SetInputTypeNumber"
android:text="Đặt Input Type = Số" />
</LinearLayout>
Bước 3: Code MainActivity (src/MainActivity.java)
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
}
public void SetInputTypeNumber(View view) {
// Đặt chỉ nhập số (bàn phím số)
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
}
}
Bước 4: Manifest (androidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run. Ban đầu EditText dùng bàn phím mặc định. Nhấn nút → bàn phím chuyển sang chỉ số.

Các hằng số InputType phổ biến
Hằng số
Mô tả
Bàn phím hiển thị
TYPE_CLASS_TEXT
Văn bản thường
QWERTY
TYPE_CLASS_NUMBER
Chỉ số (0-9)
Numeric keypad
TYPE_CLASS_PHONE
Số điện thoại (*, #, +)
Dialpad
TYPE_CLASS_DATETIME
Ngày/giờ
Date/Time picker
TYPE_TEXT_VARIATION_EMAIL_ADDRESS
Email
QWERTY + @ .com
TYPE_TEXT_VARIATION_PASSWORD
Mật khẩu (ẩn chữ)
QWERTY + ẩn ký tự
TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
Mật khẩu (hiện chữ)
QWERTY
TYPE_TEXT_FLAG_MULTI_LINE
Nhiều dòng (Enter = xuống dòng)
QWERTY + Enter
TYPE_TEXT_FLAG_CAP_WORDS
Viết hoa chữ cái đầu từ
QWERTY + auto-cap
Kết hợp nhiều flag (Bitwise OR)
// Email + tự động viết hoa từ đầu
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
// Số điện thoại + có thể nhập ký tự đặc biệt
editText.setInputType(InputType.TYPE_CLASS_PHONE);
// Mật khẩu số (PIN)
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
Lưu ý quan trọng
- Gọi
setInputType() sẽ reset cursor về đầu. Lưu vị trí cursor trước rồi restore: int pos = editText.getSelectionStart(); ... editText.setSelection(pos);.
- Để ẩn/hiện mật khẩu động: toggle
TYPE_TEXT_VARIATION_PASSWORD / TYPE_TEXT_VARIATION_VISIBLE_PASSWORD kết hợp với TYPE_CLASS_TEXT.
- Kotlin:
editText.inputType = InputType.TYPE_CLASS_NUMBER.