InputType — คืออะไร แอตทริบิวต์การป้อนข้อมูลและการกำหนดค่าใน Android

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-07 เวลาอ่าน: 9 นาที

InputType คือแอตทริบิวต์ของ Android ที่กำหนดลักษณะของข้อมูลที่ป้อนและพฤติกรรมของแป้นพิมพ์สำหรับฟิลด์ข้อความ ค่า InputType เป็นบิตมาสก์ที่รวมคลาสอินพุต (ข้อความ ตัวเลข โทรศัพท์ วันที่) และตัวปรับแต่ง (หลายบรรทัด แก้ไขอัตโนมัติ ตัวพิมพ์ใหญ่ อินพุตที่ซ่อนอยู่) InputType ส่งผลต่อประเภทของแป้นพิมพ์ที่แสดง การกรองอักขระอินพุต และพฤติกรรมการป้อนอัตโนมัติ ตาม Android Developers (2026) InputType เป็นหนึ่งในแอตทริบิวต์ที่สำคัญที่สุดสำหรับการรับประกันการป้อนข้อมูลที่ถูกต้อง และควรตั้งค่าอย่างชัดเจนสำหรับทุกฟิลด์ข้อความที่แก้ไขได้

ประเด็นสำคัญ

  • InputType — บิตมาสก์ที่กำหนดคลาสอินพุตและตัวปรับแต่งสำหรับ EditText
  • คลาสอินพุต — TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME
  • ตัวปรับแต่ง — แฟล็กที่ระบุพฤติกรรม: MULTI_LINE, AUTO_CORRECT, PASSWORD, CAP_SENTENCES
  • การรวม — คลาสและตัวปรับแต่งจะรวมกันผ่าน OR ระดับบิตเพื่อการกำหนดค่าที่แม่นยำ
  • ผลกระทบ — InputType ที่ถูกต้องช่วยเร่งการป้อนข้อมูล ลดข้อผิดพลาด และปรับปรุง UX ของฟอร์ม

InputType ใน Android คืออะไร

InputType คือค่าคงที่จำนวนเต็ม (Int) ที่เข้ารหัสโหมดอินพุตสำหรับฟิลด์ข้อความ ใน Android มีการกำหนดไว้ในคลาส android.text.InputType ค่า InputType ประกอบด้วยสองส่วน: คลาสอินพุต (บิต 0–4) และตัวปรับแต่ง (บิต 5–31) คลาสอินพุตกำหนดประเภทข้อมูลพื้นฐาน — ข้อความ ตัวเลข โทรศัพท์ วันที่ ตัวปรับแต่งระบุพฤติกรรมภายในคลาสที่เลือก — ตัวอย่างเช่น สำหรับคลาสข้อความ คุณสามารถเปิดใช้งานการแก้ไขอัตโนมัติ ตัวพิมพ์ใหญ่ หรืออินพุตหลายบรรทัด

กลไก InputType ทำงานในสามระดับ: ที่ระดับเฟรมเวิร์กของ Android จะกำหนดว่าจะสร้าง InputConnection ใด (การเชื่อมต่อระหว่าง EditText และ IME) ที่ระดับ IME (แป้นพิมพ์) จะระบุว่าจะแสดงอักขระใดและวิธีจัดการกับอินพุต ที่ระดับแอปพลิเคชัน จะกรองอักขระผ่าน InputFilter ที่สร้างใน EditText ตาม Android Source Code (AOSP, 2026) บิตมาสก์จะถูกจัดการในเมธอด TextView.getInputType() ซึ่งส่งคืนค่าปัจจุบัน และ setInputType() ซึ่งกำหนดค่าตัวกรองภายในและการเชื่อมต่อ IME ใหม่

คุณสมบัติที่สำคัญของ InputType คือไม่สามารถอ่านจากกระบวนการอื่นได้ด้วยเหตุผลด้านความปลอดภัย ซึ่งป้องกันการขโมยข้อมูลผ่านการเข้าถึงประเภทอินพุต (ตัวอย่างเช่น การระบุว่าฟิลด์เป็นรหัสผ่านหรือไม่) เมื่อพยายามอ่าน InputType จากแอปพลิเคชันอื่น TYPE_CLASS_TEXT จะถูกส่งคืนตามค่าเริ่มต้น

kotlin
// ค่าคงที่ InputType พื้นฐาน
InputType.TYPE_CLASS_TEXT       // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER     // 0x0002 = 2
InputType.TYPE_CLASS_PHONE      // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME   // 0x0004 = 4

// มาสก์สำหรับแยกคลาส
InputType.TYPE_MASK_CLASS       // 0x0000000F

คลาส InputType: TEXT, NUMBER, PHONE, DATETIME

Android กำหนดคลาส InputType พื้นฐานสี่คลาส แต่ละคลาสสอดคล้องกับหมวดหมู่ข้อมูลเฉพาะและเปิดใช้งานประเภทแป้นพิมพ์ที่เกี่ยวข้อง คลาสถูกระบุในบิต 0–4 ของบิตมาสก์และสามารถแยกได้ผ่านมาสก์ TYPE_MASK_CLASS (0x0F)

คลาสค่าคงที่แป้นพิมพ์การใช้งาน
TEXTTYPE_CLASS_TEXT (1)แป้นพิมพ์ QWERTYข้อความ ความคิดเห็น คำอธิบาย
NUMBERTYPE_CLASS_NUMBER (2)ตัวเลขปริมาณ ราคา อายุ
PHONETYPE_CLASS_PHONE (3)โทรศัพท์หมายเลขโทรศัพท์
DATETIMETYPE_CLASS_DATETIME (4)วันที่/เวลาวันที่ เวลา

TYPE_CLASS_DATETIME ไม่ค่อยได้ใช้โดยตรง — โดยปกติการป้อนวันที่จะใช้ DatePicker หรือ DatePickerDialog แทนฟิลด์ข้อความ อย่างไรก็ตาม ในบางสถานการณ์ (การป้อนวันที่ด้วยตนเองอย่างรวดเร็ว) คลาสนี้มีประโยชน์ได้ ไม่มีแป้นพิมพ์เฉพาะและมักจะแสดงแป้นพิมพ์ตัวเลข

แต่ละคลาสอินพุตสามารถรวมกับรูปแบบต่างๆ — ชนิดย่อยที่ระบุในบิต 5–7 ตัวอย่างเช่น TYPE_TEXT_VARIATION_PASSWORD (บิต 5) เพิ่มอินพุตที่ซ่อนอยู่ให้กับคลาส TEXT บิตรูปแบบ: 0x000000E0 (มาสก์ TYPE_MASK_VARIATION)

แฟล็กตัวปรับแต่ง InputType

แฟล็กตัวปรับแต่ง ของ InputType (บิต 8–31) เพิ่มความสามารถเพิ่มเติมให้กับคลาสพื้นฐาน ไม่เปลี่ยนประเภทแป้นพิมพ์ แต่ปรับเปลี่ยนพฤติกรรมอินพุต แฟล็กเฉพาะสำหรับแต่ละคลาส — แฟล็ก TEXT ไม่ทำงานกับ NUMBER และในทางกลับกัน ด้านล่างนี้คือตัวปรับแต่งหลักสำหรับแต่ละคลาส

แฟล็กสำหรับ TEXT

  • TYPE_TEXT_FLAG_CAP_CHARACTERS — ตัวอักษรทั้งหมดเป็นตัวพิมพ์ใหญ่
  • TYPE_TEXT_FLAG_CAP_WORDS — แต่ละคำขึ้นต้นด้วยตัวพิมพ์ใหญ่
  • TYPE_TEXT_FLAG_CAP_SENTENCES — ตัวพิมพ์ใหญ่ที่ต้นประโยค (ค่าเริ่มต้น)
  • TYPE_TEXT_FLAG_AUTO_CORRECT — การแก้ไขการพิมพ์ผิดอัตโนมัติ
  • TYPE_TEXT_FLAG_AUTO_COMPLETE — การเติมข้อความอัตโนมัติ (สำหรับ AutoCompleteTextView)
  • TYPE_TEXT_FLAG_MULTI_LINE — อินพุตหลายบรรทัด
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS — ปิดคำแนะนำ

แฟล็กสำหรับ NUMBER

  • TYPE_NUMBER_FLAG_SIGNED — อนุญาตจำนวนลบ (เครื่องหมายลบ)
  • TYPE_NUMBER_FLAG_DECIMAL — อนุญาตจุดทศนิยม

ตาม Android Developers Documentation (2026) แฟล็กของคลาสต่างๆ ไม่ซ้อนทับกัน — การพยายามใช้แฟล็ก TEXT กับ NUMBER จะถูกละเว้น หากต้องการตรวจสอบแฟล็กที่ตั้งไว้ ให้ใช้ AND ระดับบิต: (inputType and FLAG) != 0

การรวม InputType: ตัวอย่างสำหรับสถานการณ์ต่างๆ

การรวมที่ถูกต้องของคลาสและแฟล็ก InputType เป็นกุญแจสำคัญในการสร้างฟอร์มที่ใช้งานง่าย มาดูสถานการณ์ทั่วไปและการกำหนดค่า InputType ที่เกี่ยวข้องกัน แต่ละสถานการณ์ปรับแต่งอินพุตสำหรับประเภทข้อมูลเฉพาะ ทำให้ฟอร์มใช้งานง่ายและเร่งการกรอกข้อมูล

สถานการณ์InputTypeแป้นพิมพ์
ชื่อtextCapWordsQWERTY แต่ละคำขึ้นต้นด้วยตัวพิมพ์ใหญ่
อีเมลtextEmailAddressQWERTY พร้อม @ และ .
รหัสผ่านtextPasswordQWERTY อินพุตที่ซ่อนอยู่
โทรศัพท์phoneตัวเลขพร้อม +, #, *
ราคาnumberDecimalตัวเลขพร้อมจุดทศนิยม
ปริมาณnumberเฉพาะตัวเลข
ความคิดเห็นtextCapSentences|textMultiLineQWERTY หลายบรรทัด
ค้นหาtext|textNoSuggestionsQWERTY ไม่มีคำแนะนำ
kotlin
// การรวมสำหรับฟิลด์ราคา
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// การรวมสำหรับฟิลด์ความคิดเห็น
editText.inputType = InputType.TYPE_CLASS_TEXT or
    InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
    InputType.TYPE_TEXT_FLAG_MULTI_LINE

การทำงานกับ InputType ด้วยโปรแกรม

การตั้งค่า InputType ด้วยโปรแกรมผ่าน setInputType() จะเขียนทับค่าก่อนหน้า หากคุณต้องการเปลี่ยนเพียงบางส่วนของมาสก์ (ตัวอย่างเช่น เพิ่มแฟล็ก) คุณต้องบันทึกค่าปัจจุบัน แก้ไข และนำกลับไปใช้ใหม่ ทุกครั้งที่เรียก setInputType() จะกำหนดค่าตัวกรองภายในของ EditText ใหม่

เมธอด setRawInputType() แตกต่างจาก setInputType ตรงที่ไม่ทำให้เกิดการกำหนดค่าตัวกรองและคำแนะนำใหม่ ใช้สำหรับเปลี่ยน InputType ชั่วคราวโดยไม่ต้องโหลดสถานะ EditText ทั้งหมดใหม่ หลังจากเรียก setInputType() แล้ว แนะนำให้รีสตาร์ท IME เพื่ออัปเดตแป้นพิมพ์

การสลับโหมด

kotlin
// สลับระหว่างรหัสผ่านและข้อความที่มองเห็น
fun togglePasswordVisibility(editText: EditText) {
    val currentType = editText.inputType
    val isPassword = (currentType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0

    editText.inputType = if (isPassword) {
        InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
    } else {
        InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_PASSWORD
    }

    // รักษาตำแหน่งเคอร์เซอร์
    val cursorPos = editText.selectionStart
    editText.setSelection(cursorPos)
}

การแยกคลาสและรูปแบบ

kotlin
// รับคลาสอินพุต
fun getInputClass(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_CLASS
}

// รับรูปแบบอินพุต
fun getInputVariation(inputType: Int): Int {
    return inputType and InputType.TYPE_MASK_VARIATION
}

// ตรวจสอบว่าเป็นฟิลด์รหัสผ่าน
fun isPasswordField(editText: EditText): Boolean {
    return (editText.inputType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}

แนวทางปฏิบัติที่ดีที่สุดสำหรับการเลือก InputType

การเลือก InputType ที่ถูกต้องไม่เพียงเกี่ยวกับ UX แต่ยังเกี่ยวกับความปลอดภัยและความถูกต้องของข้อมูลด้วย คำแนะนำหลักรวมถึง: ระบุ InputType อย่างชัดเจนสำหรับทุก EditText; ใช้คลาสอินพุตที่จำเพาะที่สุดเท่าที่เป็นไปได้; อย่ารวมแฟล็กจากคลาสต่างๆ; ใช้รูปแบบ PASSWORD สำหรับฟิลด์ข้อมูลที่ละเอียดอ่อน; ใช้ imeOptions="actionSearch" สำหรับฟิลด์ค้นหา

InputType ยังส่งผลต่อการทำงานของบริการช่วยเหลือการเข้าถึง (Accessibility) ฟิลด์ประเภท textPassword ได้รับการป้องกันเพิ่มเติมจากโปรแกรมอ่านหน้าจอ — จะไม่อ่านอักขระที่ป้อนออกเสียง สำหรับฟิลด์ textEmailAddress โปรแกรมอ่านหน้าจอจะแจ้งให้ผู้ใช้ทราบว่าฟิลด์นั้นมีไว้สำหรับอีเมลและให้คำแนะนำที่เหมาะสม

  • ความชัดเจน — ตั้งค่า InputType อย่างชัดเจนเสมอ อย่าพึ่งพาค่าเริ่มต้น (textMultiLine)
  • ความจำเพาะ — ใช้ประเภทที่จำเพาะที่สุด: textEmailAddress ไม่ใช่ text สำหรับอีเมล
  • ความปลอดภัย — สำหรับรหัสผ่าน PIN และข้อมูลบัตร ใช้รูปแบบ PASSWORD
  • การป้อนอัตโนมัติ — รวม InputType กับ autofillHints เพื่อรองรับตัวจัดการรหัสผ่าน
  • การทดสอบ — ทดสอบพฤติกรรมบนแป้นพิมพ์ต่างๆ (Gboard, SwiftKey, Samsung Keyboard)

ตาม Material Design Guidelines (2025) InputType ควรตรงกับประเภทข้อมูลที่ผู้ใช้กำลังป้อน InputType ที่ไม่ถูกต้องไม่เพียงทำให้การป้อนข้อมูลช้าลง แต่ยังอาจทำให้เกิดข้อผิดพลาด: ตัวอย่างเช่น หากคุณปล่อย textMultiLine ไว้สำหรับฟิลด์หมายเลขโทรศัพท์ แป้นพิมพ์จะไม่แสดงแป้นพิมพ์ตัวเลข และผู้ใช้จะต้องเปลี่ยนเค้าโครงด้วยตนเองทุกครั้ง

คำถามที่พบบ่อย

InputType แตกต่างจาก Keyboard Type อย่างไร

InputType คือแอตทริบิวต์ของ EditText ที่กำหนดประเภทของข้อมูลอินพุตผ่านบิตมาสก์ Keyboard Type คือชื่อที่ไม่เป็นทางการสำหรับประเภทแป้นพิมพ์ที่มองเห็นซึ่งเปิดใช้งานโดย InputType InputType ยังส่งผลต่อการกรองอักขระ การแก้ไขอัตโนมัติ และการเติมข้อความอัตโนมัติ — ไม่ใช่เพียงเค้าโครงแป้นพิมพ์เท่านั้น

วิธีรีเซ็ต InputType เป็นค่าเริ่มต้น

ตั้งค่า editText.inputType = InputType.TYPE_CLASS_TEXT หรือใช้ค่าคงที่ InputType.TYPE_NULL (0x00000000) สำหรับการรีเซ็ตทั้งหมด ด้วย TYPE_NULL ฟิลด์จะไม่แสดงแป้นพิมพ์เมื่อโฟกัส หากต้องการกลับไปยังอินพุตข้อความมาตรฐาน ให้ตั้งค่า TYPE_CLASS_TEXT โดยไม่มีแฟล็ก

ฉันสามารถสร้าง InputType ที่กำหนดเองได้หรือไม่

คุณไม่สามารถสร้างคลาส InputType ใหม่ได้ เนื่องจากเป็นส่วนหนึ่งของเฟรมเวิร์ก Android อย่างไรก็ตาม คุณสามารถรวมคลาสและแฟล็กที่มีอยู่เพื่อให้ได้พฤติกรรมที่ต้องการ ดำเนินการกรองอักขระเพิ่มเติมผ่าน InputFilter ซึ่งตั้งค่าบน EditText โดยใช้เมธอด setFilters()

InputType ส่งผลต่อ IME (แป้นพิมพ์) อย่างไร

InputType จะถูกส่งไปยังระบบอินพุตผ่าน InputConnection IME จะอ่านคลาสและรูปแบบ InputType และเลือกเค้าโครงแป้นพิมพ์ที่เกี่ยวข้อง ตัวอย่างเช่น TYPE_CLASS_NUMBER กับ TYPE_NUMBER_FLAG_DECIMAL ทำให้แป้นพิมพ์แสดงแป้นพิมพ์ตัวเลขที่มีจุดทศนิยม แป้นพิมพ์ที่ทันสมัยส่วนใหญ่ปฏิบัติตามคำแนะนำเหล่านี้

วิธีตรวจสอบ InputType ในขณะรันไทม์

ใช้คุณสมบัติ editText.inputType ใน Kotlin หรือ editText.getInputType() ใน Java หากต้องการแยกคลาส ให้ใช้มาสก์: inputType and InputType.TYPE_MASK_CLASS หากต้องการตรวจสอบแฟล็กเฉพาะ: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — หากผลลัพธ์ != 0 แสดงว่าแฟล็กถูกตั้งค่า

สรุป

  • InputType — บิตมาสก์ที่ประกอบด้วยคลาสอินพุต (TEXT, NUMBER, PHONE, DATETIME) และตัวปรับแต่ง
  • คลาสอินพุต กำหนดประเภทข้อมูลพื้นฐานและประเภทของแป้นพิมพ์ที่แสดง
  • ตัวปรับแต่ง ระบุพฤติกรรม: หลายบรรทัด แก้ไขอัตโนมัติ ตัวพิมพ์ใหญ่ อินพุตที่ซ่อนอยู่
  • การรวมผ่าน OR ระดับบิต ช่วยให้สร้างการกำหนดค่าที่แม่นยำสำหรับสถานการณ์ต่างๆ
  • รูปแบบ PASSWORD ปิดการแก้ไขอัตโนมัติ ซ่อนอักขระ และป้องกันการจัดเก็บในพจนานุกรม
  • การตั้งค่าด้วยโปรแกรม ผ่าน setInputType() จำเป็นต้องรีสตาร์ท IME เพื่ออัปเดตแป้นพิมพ์
  • แนวทางปฏิบัติที่ดีที่สุด — ตั้งค่า InputType อย่างชัดเจน ใช้ประเภทเฉพาะ และทดสอบบนแป้นพิมพ์ต่างๆ

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม