EditText เป็นคอมโพเนนต์พื้นฐานของ Android ที่ออกแบบมาสำหรับการป้อนและแก้ไขข้อความในส่วนติดต่อผู้ใช้ โดยสืบทอดจาก TextView และอนุญาตให้ป้อนอักขระผ่านแป้นพิมพ์เสมือนหรือจริง EditText รองรับหลายโหมด: ข้อความบรรทัดเดียวและหลายบรรทัด รหัสผ่าน ตัวเลข ที่อยู่อีเมล และหมายเลขโทรศัพท์ ตามข้อมูลจาก Android Developers (2026) มีการใช้ EditText ในมากกว่า 90% ของแอป Android เพื่อสร้างฟอร์ม ฟิลด์ค้นหา แชท และหน้าจอป้อนข้อมูล
ประเด็นสำคัญ
EditText เป็นคลาสจากแพ็กเกจ android.widget ที่ implement ฟิลด์ข้อความแบบโต้ตอบสำหรับการป้อนข้อมูลผู้ใช้ ในลำดับชั้นการสืบทอดของ Android EditText ขยาย TextView ดังนั้นจึงสืบทอดคุณสมบัติทั้งหมดของป้ายข้อความ รวมถึงการจัดการแบบอักษร สี และการจัดตำแหน่ง ความแตกต่างหลักระหว่าง EditText และ TextView คือความสามารถในการแก้ไขเนื้อหา — ผู้ใช้สามารถป้อน ลบ และแก้ไขข้อความได้โดยตรงในอินเทอร์เฟซ
แต่ละ EditText เชื่อมโยงกับอินสแตนซ์ Editable ที่เก็บข้อความที่ป้อนและรองรับการดำเนินการแทรก ลบ และแทนที่ เมื่อพิมพ์ EditText จะจัดการตำแหน่งเคอร์เซอร์ การเลือกข้อความ และประวัติการเปลี่ยนแปลงสำหรับเลิกทำ/ทำซ้ำโดยอัตโนมัติ ตาม Android Developers Guide (2026) EditText ยังรองรับการเติมข้อความอัตโนมัติผ่านคลาส AutoCompleteTextView ซึ่งสืบทอดจาก EditText
สถาปัตยกรรมของ EditText สร้างขึ้นบนการแยกโมเดล (Editable) มุมมอง (TextView) และตัวควบคุม (InputConnection) เมื่อได้รับการโฟกัส EditText จะสร้าง InputConnection ซึ่งระบบป้อนข้อมูลจะส่งอักขระ การกดแป้นพิมพ์ และคำสั่งแก้ไขผ่านกลไกนี้ กลไกนี้รับประกันความเข้ากันได้กับวิธีการป้อนข้อมูลใด ๆ — ตั้งแต่แป้นพิมพ์เสมือนไปจนถึงแป้นพิมพ์ Bluetooth จริงและการป้อนด้วยเสียง
val editText = EditText(context).apply {
hint = "ป้อนข้อความ"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText มีคุณลักษณะหลายสิบรายการสำหรับการปรับแต่งพฤติกรรมและลักษณะที่ปรากฏอย่างละเอียด สามารถตั้งค่าได้ทั้งในเลย์เอาต์ XML และโดยการเขียนโปรแกรมผ่าน Kotlin หรือ Java คุณลักษณะแบ่งออกเป็นหมวดหมู่: การควบคุมข้อความ ข้อจำกัด การจัดแต่งภาพ และการโต้ตอบกับแป้นพิมพ์
| คุณลักษณะ | คำอธิบาย | ค่าตัวอย่าง |
|---|---|---|
| android:hint | ข้อความคำแนะนำที่แสดงในฟิลด์ว่าง | "ป้อนอีเมล" |
| android:inputType | โหมดป้อนข้อมูล (ข้อความ ตัวเลข รหัสผ่าน ฯลฯ) | textEmailAddress |
| android:maxLines | จำนวนบรรทัดสูงสุด | 3 |
| android:maxLength | ความยาวข้อความสูงสุดเป็นอักขระ | 100 |
| android:textColorHint | สีของข้อความคำแนะนำ | #999999 |
คุณลักษณะ android:hint เป็นหนึ่งในคุณลักษณะที่สำคัญที่สุด — จะบอกผู้ใช้ว่าคาดหวังข้อมูลใดในฟิลด์ เมื่อป้อนข้อความ คำแนะนำจะถูกซ่อนโดยอัตโนมัติ คำแนะนำไม่มีส่วนร่วมในการส่งฟอร์มและไม่ถูกบันทึกเป็นค่าฟิลด์ Material Design แนะนำให้ใช้ TextInputLayout พร้อมป้ายกำกับลอยแทนคำแนะนำธรรมดาเพื่อให้ดูทันสมัยยิ่งขึ้น
<!-- 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" />
คุณลักษณะ inputType กำหนดประเภทของแป้นพิมพ์ที่จะแสดงให้ผู้ใช้เห็นและอักขระใดที่อนุญาตให้ป้อนได้ เป็นบิตมาสก์ที่คลาสการป้อนข้อมูล (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) รวมกับตัวปรับแต่ง
แต่ละ โหมดป้อนข้อมูล ไม่เพียงเปลี่ยนเค้าโครงแป้นพิมพ์แต่ยังส่งผลต่อการประมวลผลข้อความด้วย: ในโหมดตัวเลขอนุญาตเฉพาะตัวเลขและตัวคั่นทศนิยม ในโหมดอีเมลจะใช้สัญลักษณ์ @ และส่วนขยายโดเมนได้ และในโหมดโทรศัพท์จะแสดงตัวเลขและสัญลักษณ์ +, #, * การเลือก inputType ที่ถูกต้องส่งผลกระทบอย่างมากต่อประสบการณ์ผู้ใช้ — แป้นพิมพ์ที่ไม่เหมาะสมบังคับให้ผู้ใช้เปลี่ยนโMode ทำให้เวลาในการกรอกฟอร์มเพิ่มขึ้น 30–50%
ตาม Material Design Guidelines (2025) แนะนำให้ใช้ inputType ที่เฉพาะเจาะจงที่สุดสำหรับแต่ละฟิลด์: textPassword สำหรับรหัสผ่าน numberDecimal สำหรับราคา phone สำหรับหมายเลขโทรศัพท์ textMultiLine สำหรับการป้อนหลายบรรทัด ซึ่งช่วยเร่งการกรอกฟอร์มและลดข้อผิดพลาดในการป้อนข้อมูล
// การตั้งค่า inputType โดยการเขียนโปรแกรม
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher เป็นอินเทอร์เฟซสำหรับติดตามการเปลี่ยนแปลงข้อความใน EditText แบบเรียลไทม์ ประกอบด้วยสามเมธอด: beforeTextChanged ถูกเรียกก่อนการเปลี่ยนแปลง onTextChanged ถูกเรียกระหว่างการเปลี่ยนแปลง afterTextChanged ถูกเรียกหลังจากการเปลี่ยนแปลงข้อความเสร็จสมบูรณ์ TextWatcher ใช้สำหรับการตรวจสอบความถูกต้องของการป้อนข้อมูล การนับอักขระ การค้นหา และการเติมข้อความอัตโนมัติ
OnEditorActionListener จัดการการดำเนินการของผู้ใช้บนแป้นพิมพ์: การกด Done (IME_ACTION_DONE), Search (IME_ACTION_SEARCH), Send (IME_ACTION_SEND), Next (IME_ACTION_NEXT) และอื่น ๆ ตัวฟังนี้มีประโยชน์อย่างยิ่งสำหรับการจัดระเบียบการนำทางฟอร์ม — เมื่อกด Next โฟกัสจะย้ายไปยังฟิลด์ถัดไปโดยอัตโนมัติ และเมื่อกด Done แป้นพิมพ์จะถูกซ่อนและดำเนินการส่ง
ตาม Android Developers Blog (2025) การใช้ OnEditorActionListener อย่างถูกต้องกับคุณลักษณะ android:imeOptions ช่วยให้สร้างฟอร์มที่ใช้งานง่ายโดยไม่ต้องมีปุ่มส่งเพิ่มเติม — ผู้ใช้กรอกฟิลด์และกด Done บนแป้นพิมพ์ ซึ่งจะเริ่มการบันทึกหรือค้นหา
// TextWatcher สำหรับตรวจสอบอีเมล
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 สำหรับส่งฟอร์ม
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
มาดูตัวอย่างสมบูรณ์ของการสร้างหน้าจอเข้าสู่ระบบโดยใช้ EditText สำหรับป้อนอีเมลและรหัสผ่าน ตัวอย่างนี้แสดงการกำหนดค่า inputType การตรวจสอบความถูกต้องผ่าน TextWatcher และการจัดการการกดปุ่มเข้าสู่ระบบ
@+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" />
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
}
}
}
EditText รองรับการปรับแต่งผ่านคุณลักษณะ XML ธีม และสไตล์ สามารถเปลี่ยนสีข้อความ สีคำแนะนำ สีขีดเส้นใต้ (backgroundTint) สไตล์แบบอักษร ขนาดข้อความ และอื่น ๆ อีกมากมาย Material Components มีธีม MaterialComponents.EditText พร้อมคุณลักษณะที่กำหนดเองรวมถึง boxStrokeColor, boxBackgroundColor และ endIconMode
ในการเปลี่ยนสีขีดเส้นใต้ของ EditText ให้ใช้คุณลักษณะ android:backgroundTint ซึ่งกำหนดสีสำหรับสถานะเริ่มต้นและสถานะโฟกัส ใน Material Design สีขีดเส้นใต้ถูกจัดการผ่าน colorPrimary ของธีม สำหรับการปรับแต่งอย่างสมบูรณ์ คุณสามารถสร้าง drawable ที่กำหนดเองสำหรับพื้นหลังในโฟลเดอร์ res/drawable
| สไตล์ | คุณลักษณะ | ผลลัพธ์ |
|---|---|---|
| สีข้อความ | android:textColor | เปลี่ยนสีของข้อความที่ป้อน |
| สีคำแนะนำ | android:textColorHint | เปลี่ยนสีของข้อความคำแนะนำ |
| ขีดเส้นใต้ | android:backgroundTint | เปลี่ยนสีเส้นใต้ฟิลด์ |
| ขนาดแบบอักษร | android:textSize | กำหนดขนาดข้อความเป็น sp |
| แบบอักษร | android:fontFamily | ใช้แบบอักษรที่กำหนดเอง |
ในการสร้างสไตล์ที่สอดคล้องกันสำหรับฟิลด์ EditText ทั้งหมดในแอปของคุณ แนะนำให้กำหนดสไตล์ส่วนกลางในธีม Material Design มีสไตล์ Widget.MaterialComponents.TextInputLayout.OutlinedBox ซึ่งใช้โดยอัตโนมัติกับฟิลด์ป้อนข้อมูลทั้งหมดที่ใช้ TextInputLayout ซึ่งรับประกันลักษณะที่สอดคล้องกันโดยไม่ต้องทำซ้ำคุณลักษณะในทุกเลย์เอาต์
คำถามที่พบบ่อย
EditText สืบทอดจาก TextView และเพิ่มความสามารถในการแก้ไขข้อความ TextView แสดงข้อความเท่านั้น ในขณะที่ EditText อนุญาตให้ผู้ใช้ป้อน ลบ และแก้ไขเนื้อหา EditText ยังรองรับ inputType, TextWatcher, การจัดการเคอร์เซอร์ และฟังก์ชันอื่น ๆ ที่เกี่ยวข้องกับการป้อนข้อมูล
ใช้ InputFilter — อินเทอร์เฟซสำหรับกรองอักขระที่ป้อน EditText รองรับการตั้งค่าอาร์เรย์ของตัวกรองผ่านเมธอด setFilters() ตัวอย่างเช่น InputFilter.LengthFilter จำกัดความยาวข้อความ ในขณะที่ InputFilter ที่กำหนดเองสามารถจำกัดอักขระเฉพาะ นิพจน์ปกติ หรือช่วง Unicode
เรียก editText.text.toString() ใน Kotlin หรือ editText.getText().toString() ใน Java คุณสมบัติ text ส่งคืน Editable ซึ่งแปลงเป็น String ผ่าน toString() ตรวจสอบค่า null และว่างเสมอก่อนใช้ข้อความ โดยเฉพาะในฟอร์มที่มีฟิลด์บังคับ
ตั้งค่าคุณลักษณะ android:inputType="textMultiLine" หรือเพิ่มแฟล็ก InputType.TYPE_TEXT_FLAG_MULTI_LINE โดยการเขียนโปรแกรม ในโหมดหลายบรรทัด EditText อนุญาตให้ขึ้นบรรทัดใหม่ด้วย Enter และขยายความสูงโดยอัตโนมัติ ใช้ android:maxLines หรือ android:minLines เพื่อจำกัดความสูง
ตั้งค่าคุณลักษณะ android:enabled="false" หรือเรียก editText.isEnabled = false ในโค้ด EditText ที่ปิดใช้งานจะไม่ตอบสนองต่อการสัมผัส ไม่สามารถรับโฟกัส และแสดงเป็นสีเทา (สถานะปิดใช้งาน) ทางเลือกอื่นคือใช้ android:focusable="false" ซึ่งปิดการป้อนข้อมูลแต่คงลักษณะปกติไว้
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม