EditText: nó là gì, thuộc tính và làm việc với trường nhập liệu trong Android

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

EditText là thành phần Android cơ bản được thiết kế để nhập và chỉnh sửa văn bản trong giao diện người dùng. Nó kế thừa từ TextView và cho phép nhập ký tự từ bàn phím ảo hoặc vật lý. EditText hỗ trợ nhiều chế độ: văn bản một dòng và nhiều dòng, mật khẩu, số, địa chỉ email và số điện thoại. Theo Android Developers (2026), EditText được sử dụng trong hơn 90% ứng dụng Android để tạo biểu mẫu, trường tìm kiếm, chat và màn hình nhập dữ liệu.

Những điểm chính

  • EditText là thành phần nhập văn bản cơ bản trong Android, một lớp con của TextView.
  • Chế độ nhập — hỗ trợ văn bản, số, mật khẩu, email, điện thoại và nhập nhiều dòng.
  • Thuộc tính XML — cấu hình qua inputType, maxLines, hint, textColorHint và các tham số khác.
  • Trình lắng nghe — TextWatcher để theo dõi thay đổi và OnEditorActionListener để xử lý hành động.
  • Material Design — TextInputLayout mở rộng EditText với nhãn nổi và thông báo lỗi.

EditText trong Android là gì

EditText là một lớp từ gói android.widget triển khai trường văn bản tương tác để nhập dữ liệu người dùng. Trong hệ thống phân cấp kế thừa của Android, EditText mở rộng TextView, do đó nó kế thừa tất cả các thuộc tính của nhãn văn bản, bao gồm quản lý phông chữ, màu sắc và căn chỉnh. Sự khác biệt chính giữa EditText và TextView là khả năng chỉnh sửa nội dung — người dùng có thể nhập, xóa và sửa đổi văn bản trực tiếp trong giao diện.

Mỗi EditText được liên kết với một phiên bản Editable lưu trữ văn bản đã nhập và hỗ trợ các thao tác chèn, xóa và thay thế. Khi gõ, EditText tự động quản lý vị trí con trỏ, lựa chọn văn bản và lịch sử thay đổi để hoàn tác/làm lại. Theo Hướng dẫn dành cho nhà phát triển Android (2026), EditText cũng hỗ trợ tự động hoàn thành thông qua lớp AutoCompleteTextView, kế thừa từ EditText.

Kiến trúc của EditText được xây dựng trên sự tách biệt giữa mô hình (Editable), chế độ xem (TextView) và bộ điều khiển (InputConnection). Khi nhận được tiêu điểm, EditText tạo InputConnection mà qua đó hệ thống nhập liệu truyền các ký tự, lần nhấn phím và lệnh chỉnh sửa. Cơ chế này đảm bảo khả năng tương thích với mọi phương thức nhập — từ bàn phím ảo đến bàn phím Bluetooth vật lý và nhập liệu bằng giọng nói.

kotlin
val editText = EditText(context).apply {
    hint = "Nhập văn bản"
    inputType = InputType.TYPE_CLASS_TEXT
    maxLines = 1
    setTextColor(Color.parseColor("#000000"))
}

Thuộc tính chính của EditText

EditText cung cấp hàng chục thuộc tính để tinh chỉnh hành vi và giao diện. Chúng có thể được thiết lập cả trong bố cục XML và bằng cách lập trình qua Kotlin hoặc Java. Các thuộc tính được chia thành các danh mục: kiểm soát văn bản, ràng buộc, tạo kiểu trực quan và tương tác bàn phím.

Thuộc tínhMô tảGiá trị ví dụ
android:hintVăn bản gợi ý hiển thị trong trường trống"Nhập email"
android:inputTypeChế độ nhập (văn bản, số, mật khẩu, v.v.)textEmailAddress
android:maxLinesSố dòng tối đa3
android:maxLengthĐộ dài văn bản tối đa tính bằng ký tự100
android:textColorHintMàu của văn bản gợi ý#999999

Thuộc tính android:hint là một trong những thuộc tính quan trọng nhất — nó cho người dùng biết dữ liệu nào được mong đợi trong trường. Khi văn bản được nhập, gợi ý sẽ tự động ẩn đi. Gợi ý không tham gia vào việc gửi biểu mẫu và không được lưu dưới dạng giá trị trường. Material Design khuyến nghị sử dụng TextInputLayout với nhãn nổi thay vì gợi ý đơn giản để có giao diện hiện đại hơn.

  • android:selectAllOnFocus — chọn toàn bộ văn bản khi nhận tiêu điểm (hữu ích cho trường tìm kiếm).
  • android:maxLength — giới hạn số lượng ký tự nhập, cắt bớt phần vượt quá.
  • android:lines — đặt chiều cao cố định của trường theo dòng (khác với minLines).
  • android:gravity — căn chỉnh văn bản trong trường: left, center, top, v.v.
xml
                <!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />

Chế độ nhập và inputType

Thuộc tính inputType xác định loại bàn phím sẽ hiển thị cho người dùng và những ký tự nào được phép nhập. Nó là một mặt nạ bit nơi lớp nhập (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) được kết hợp với các bổ ngữ.

Mỗi chế độ nhập không chỉ thay đổi bố cục bàn phím mà còn ảnh hưởng đến xử lý văn bản: ở chế độ số chỉ cho phép chữ số và dấu phân cách thập phân, ở chế độ email có sẵn ký tự @ và phần mở rộng miền, ở chế độ điện thoại hiển thị chữ số và các ký hiệu +, #, *. Việc chọn inputType chính xác ảnh hưởng nghiêm trọng đến trải nghiệm người dùng — bàn phím không phù hợp buộc người dùng phải chuyển đổi chế độ, làm tăng thời gian điền biểu mẫu lên 30–50%.

Theo Nguyên tắc Material Design (2025), khuyến nghị sử dụng inputType cụ thể nhất cho mỗi trường: textPassword cho mật khẩu, numberDecimal cho giá cả, phone cho số điện thoại, textMultiLine cho nhập nhiều dòng. Điều này tăng tốc độ điền biểu mẫu và giảm lỗi nhập.

kotlin
// Thiết lập inputType theo chương trình
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_AUTO_CORRECT

Trình lắng nghe EditText: TextWatcher và OnEditorActionListener

TextWatcher là một giao diện để theo dõi các thay đổi văn bản trong EditText theo thời gian thực. Nó chứa ba phương thức: beforeTextChanged được gọi trước khi thay đổi, onTextChanged được gọi trong khi thay đổi, afterTextChanged được gọi sau khi thay đổi văn bản hoàn tất. TextWatcher được sử dụng để xác thực đầu vào, đếm ký tự, tìm kiếm và tự động hoàn thành.

OnEditorActionListener xử lý các hành động của người dùng trên bàn phím: nhấn Done (IME_ACTION_DONE), Search (IME_ACTION_SEARCH), Send (IME_ACTION_SEND), Next (IME_ACTION_NEXT) và các hành động khác. Trình lắng nghe này đặc biệt hữu ích để tổ chức điều hướng biểu mẫu — khi nhấn Next, tiêu điểm tự động chuyển đến trường tiếp theo và khi nhấn Done, bàn phím ẩn đi và việc gửi được thực hiện.

Theo Blog dành cho nhà phát triển Android (2025), việc sử dụng đúng OnEditorActionListener với thuộc tính android:imeOptions cho phép tạo các biểu mẫu trực quan mà không cần nút gửi bổ sung — người dùng điền các trường và nhấn Done trên bàn phím, kích hoạt lưu hoặc tìm kiếm.

kotlin
// TextWatcher để xác thực email
editText.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(s: Editable?) {
        val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
        editText.error = if (isValid) null else "Invalid email format"
    }
})

// OnEditorActionListener để gửi biểu mẫu
editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        submitForm()
        true
    } else false
}

Ví dụ mã với EditText

Hãy xem một ví dụ hoàn chỉnh về tạo màn hình đăng nhập sử dụng EditText để nhập email và mật khẩu. Ví dụ này trình bày cấu hình inputType, xác thực qua TextWatcher và xử lý nhấn nút đăng nhập.

Bố cục XML màn hình đăng nhập

xml
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />

@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />

Thiết lập EditText theo chương trình

kotlin
class LoginFragment : Fragment() {
    private lateinit var etEmail: EditText
    private lateinit var etPassword: EditText

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        etEmail = view.findViewById(R.id.etLoginEmail)
        etPassword = view.findViewById(R.id.etLoginPassword)

        etEmail.addTextChangedListener(emailWatcher)
        etPassword.setOnEditorActionListener { _, actionId, _ ->
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                performLogin()
                true
            } else false
        }
    }
}

Tạo kiểu cho EditText

EditText hỗ trợ tùy chỉnh thông qua thuộc tính XML, chủ đề và kiểu. Có thể thay đổi màu văn bản, màu gợi ý, màu gạch chân (backgroundTint), kiểu phông chữ, cỡ chữ và nhiều hơn nữa. Material Components cung cấp chủ đề MaterialComponents.EditText với các thuộc tính tùy chỉnh bao gồm boxStrokeColor, boxBackgroundColor và endIconMode.

Để thay đổi màu gạch chân của EditText, sử dụng thuộc tính android:backgroundTint, thiết lập màu cho trạng thái mặc định và trạng thái tiêu điểm. Trong Material Design, màu gạch chân được quản lý thông qua colorPrimary của chủ đề. Để tùy chỉnh hoàn toàn, bạn có thể tạo drawable tùy chỉnh cho nền trong thư mục res/drawable.

KiểuThuộc tínhKết quả
Màu văn bảnandroid:textColorThay đổi màu văn bản đã nhập
Màu gợi ýandroid:textColorHintThay đổi màu văn bản gợi ý
Gạch chânandroid:backgroundTintThay đổi màu đường gạch dưới trường
Cỡ chữandroid:textSizeĐặt cỡ chữ bằng sp
Phông chữandroid:fontFamilyÁp dụng phông chữ tùy chỉnh

Để tạo kiểu nhất quán cho tất cả các trường EditText trong ứng dụng, khuyến nghị định nghĩa kiểu toàn cục trong chủ đề. Material Design cung cấp kiểu Widget.MaterialComponents.TextInputLayout.OutlinedBox, tự động áp dụng cho tất cả các trường nhập sử dụng TextInputLayout. Điều này đảm bảo giao diện nhất quán mà không lặp lại thuộc tính trong mỗi bố cục.

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

Sự khác biệt giữa EditText và TextView là gì?

EditText kế thừa từ TextView và thêm khả năng chỉnh sửa văn bản. TextView chỉ hiển thị văn bản, trong khi EditText cho phép người dùng nhập, xóa và sửa đổi nội dung. EditText cũng hỗ trợ inputType, TextWatcher, quản lý con trỏ và các chức năng khác liên quan đến nhập dữ liệu.

Làm thế nào để hạn chế các ký tự nhất định trong EditText?

Sử dụng InputFilter — một giao diện để lọc các ký tự nhập. EditText hỗ trợ thiết lập một mảng bộ lọc thông qua phương thức setFilters(). Ví dụ: InputFilter.LengthFilter giới hạn độ dài văn bản, trong khi InputFilter tùy chỉnh có thể hạn chế các ký tự cụ thể, biểu thức chính quy hoặc phạm vi Unicode.

Làm thế nào để lấy văn bản từ EditText trong mã?

Gọi editText.text.toString() trong Kotlin hoặc editText.getText().toString() trong Java. Thuộc tính text trả về Editable, được chuyển đổi thành String qua toString(). Luôn kiểm tra giá trị null và rỗng trước khi sử dụng văn bản, đặc biệt trong các biểu mẫu có trường bắt buộc.

Làm thế nào để làm EditText nhiều dòng?

Đặt thuộc tính android:inputType="textMultiLine" hoặc thêm cờ InputType.TYPE_TEXT_FLAG_MULTI_LINE theo chương trình. Ở chế độ nhiều dòng, EditText cho phép xuống dòng bằng Enter và tự động mở rộng chiều cao. Sử dụng android:maxLines hoặc android:minLines để giới hạn chiều cao.

Làm thế nào để vô hiệu hóa EditText để chỉnh sửa?

Đặt thuộc tính android:enabled="false" hoặc gọi editText.isEnabled = false trong mã. EditText bị vô hiệu hóa không phản ứng với chạm, không thể nhận tiêu điểm và hiển thị bằng màu xám (trạng thái vô hiệu). Một giải pháp thay thế là sử dụng android:focusable="false", vô hiệu hóa nhập liệu nhưng giữ nguyên giao diện bình thường.

Tổng kết

  • EditText là thành phần nhập văn bản cơ bản trong Android, một lớp con của TextView với hỗ trợ chỉnh sửa.
  • inputType xác định chế độ bàn phím và ký tự được phép: văn bản, số, email, điện thoại, mật khẩu.
  • TextWatcher cho phép theo dõi thay đổi văn bản theo thời gian thực để xác thực và tự động hoàn thành.
  • OnEditorActionListener xử lý các hành động bàn phím: Done, Search, Next, Send.
  • InputFilter hạn chế ký tự nhập và độ dài văn bản thông qua bộ lọc tùy chỉnh.
  • Thuộc tính như hint, maxLines, maxLength, textColorHint cấu hình hành vi và giao diện.
  • Material Design qua TextInputLayout cung cấp giao diện hiện đại với nhãn nổi và lỗi.

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