Keyboard Type — คืออะไร ชนิดแป้นพิมพ์ และการตั้งค่าการป้อนข้อมูลใน Android

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

Keyboard Type คือการกำหนดค่าแป้นพิมพ์เสมือนจริงใน Android ที่กำหนดชุดของอักขระที่แสดงและรูปแบบสำหรับช่องป้อนข้อมูลเฉพาะเจาะจง Android รองรับหลายชนิดที่ตั้งค่าไว้ล่วงหน้า: text (ข้อความมาตรฐาน), number (ตัวเลข), phone (โทรศัพท์), email (ด้วยสัญลักษณ์ @), textPassword (สำหรับรหัสผ่าน), datetime และอื่น ๆ แต่ละชนิดจะเพิ่มประสิทธิภาพอินเทอร์เฟาส์การป้อนสำหรับงานเฉพาะเจาะจง — ตัวอย่างเช่น แป้นพิมพ์อีเมลแสดงสัญลักษณ์ @ และจุดบนหน้าจอหลัก ตามข้อมูลจาก Android Developers (2026) การเลือก Keyboard Type ที่ถูกต้องช่วยลดจำนวนการกดแป้นพิมพ์ได้ 20–40% เมื่อเทียบกับแป้นพิมพ์ข้อความมาตรฐาน

ข้อควรจำ

  • Keyboard Type — โหมดแป้นพิมพ์ที่กำหนดโดยแอตทริบัวต์ android:inputType ใน Android
  • ชนิดหลัก — text, number, phone, email, textPassword, datetime สำหรับสถานการณ์การป้อนที่แตกต่างกัน
  • การเพิ่มประสิทธิภาพการป้อน — ชนิดแป้นพิมพ์ที่ถูกต้องช่วยเร่งการกรอกแบบฟอร์มได้ 20–40%
  • การรวมแฟลก — inputType รวมคลาสการป้อนและตัวแก้ไข (หลายบรรทัด, แก้ไขอัตโนมัติ)
  • ตัวเลือก IME — แอตทริบัวต์ imeOptions ควบคุมปุ่มการกระทำบนแป้นพิมพ์ (Done, Search, Next)

Keyboard Type ใน Android คืออะไร

Keyboard Type ถูกกำหนดโดยค่าของแอตทริบัวต์ android:inputType ใน XML หรือการเรียก setInputType() แบบโปรแกรมในโค้ด InputType เป็นบิตมาส์ที่คลาสการป้อนถูกรวมกับแฟลกตัวแก้ไข คลาสฐานคือ: TYPE_CLASS_TEXT สำหรับข้อความ, TYPE_CLASS_NUMBER สำหรับตัวเลข, TYPE_CLASS_PHONE สำหรับโทรศัพท์, TYPE_CLASS_DATETIME สำหรับวันที่และเวลา

แต่ละ Keyboard Type มีผลต่อสามด้าน: รูปแบบแป้นพิมพ์เสมือนจริง (อักขระใดที่เห็นได้บนหน้าจอหลัก), การกรองอักขระที่ป้อน (อักขระใดที่ได้รับอนุญาต), และพฤติกรรมการแก้ไขอัตโนมัติ/การเติมอัตโนมัติ ตัวอย่างเช่น แป้นพิมพ์ตัวเลขแสดงเฉพาะตัวเลขและตัวคั่นทศนิยม และจะไม่แสดงตัวอักษรแม้ว่าผู้ใช้จะเปลี่ยนตัวพิมพ์ใหญ่/เล็ก ตามข้อมูลจาก Android Developers Documentation (2026) การรวมคลาสกับแฟลกช่วยให้สามารถสร้างโหมดเฉพาะทางสูง: ข้อความหลายบรรทัดกับการแก้ไขอัตโนมัติ, ตัวเลขทศนิยม, รหัสผ่านที่มีการสนับสนุนการเติมอัตโนมัติ

สำคัญที่จะเข้าใจว่า Keyboard Type เป็นคำแนะนำสำหรับระบบป้อนข้อมูล (IME) แป้นพิมพ์ของบุคคลที่สาม (Gboard, SwiftKey) อาจละเว้นชนิดที่ระบุไว้บางส่วนหากผู้ใช้ตั้งค่าการตั้งค่าของตนเอง อย่างไรก็ตาม แป้นพิมพ์ Android มาตรฐานส่วนใหญ่และ Google Gboard เป็นไปตามชนิดการป้อนที่ระบุอย่างเข้มงวด

kotlin
// การตั้งค่าชนิดแป้นพิมพ์แบบโปรแกรม
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL or
    InputType.TYPE_NUMBER_FLAG_SIGNED

Text — แป้นพิมพ์ข้อความมาตรฐาน

TYPE_CLASS_TEXT เป็นคลาสฐานสำหรับการป้อนข้อความ เปิดใช้งานแป้นพิมพ์ QWERTY มาตรฐานที่มีตัวอักษร, ตัวเลข และสัญลักษณ์ คลาสข้อความมีตัวแก้ไขมากที่สุดซึ่งปรับแต่งพฤติกรรม: TYPE_TEXT_FLAG_CAP_SENTENCES (ตัวพิมพ์ใหญ่อัตโนมัติตอนต้นประโยค), TYPE_TEXT_FLAG_AUTO_CORRECT (แก้ไขอัตโนมัติ), TYPE_TEXT_FLAG_MULTI_LINE (โหมดหลายบรรทัด), TYPE_TEXT_FLAG_NO_SUGGESTIONS (ปิดการแนะนำ)

ตัวแก้ไขของ แป้นพิมพ์ข้อความ สามารถรวมกันเพื่อสร้างการกำหนดค่าที่แม่นยำ: ตัวอย่างเช่น text|textCapSentences|textAutoCorrect เหมาะสำหรับช่องป้อนความเห็นที่ต้องการตัวพิมพ์ใหญ่อัตโนมัติและการแก้ไขผิดพิมพ์ ในขณะที่ text|textNoSuggestions ใช้สำหรับการป้อนโค้ดหรือคำศัพท์พิเศษที่การแก้ไขอัตโนมัติอาจเป็นอันตราย

ตามข้อมูลจาก UX Stack Exchange (2025) แป้นพิมพ์ข้อความที่เปิดใช้การแก้ไขอัตโนมัติช่วยเร่งการพิมพ์ได้ 15–25% สำหรับผู้ใช้ทั่วไป แต่สำหรับคำศัพท์ทางเทคนิค (โค้ด, URL, อีเมล) แนะนำให้ปิดการแก้ไขอัตโนมัติ เพราะมักแทนที่คำที่ถูกต้องด้วยคำที่ไม่ถูกต้อง

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

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

Number — แป้นพิมพ์ตัวเลข

TYPE_CLASS_NUMBER เปิดใช้งานแป้นพิมพ์ตัวเลข ซึ่งแสดงเฉพาะตัวเลข ตัวคั่นทศนิยม และเครื่องหมายลบ ชนิดนี้ใช้สำหรับช่องป้อนข้อมูลจำนวน ราคา อายุ รหัส และข้อมูลตัวเลขอื่น ๆ แป้นพิมพ์ตัวเลขใช้พื้นที่หน้าจอน้อยกว่าแป้นพิมพ์ข้อความ และกำจัดการป้อนตัวอักษรโดยบัํเอิญเหตุ

Number มีตัวแก้ไขสามตัว: TYPE_NUMBER_FLAG_DECIMAL เพิ่มจุด/จุลากตัวเลข TYPE_NUMBER_FLAG_SIGNED เพิ่มเครื่องหมายลบสำหรับตัวเลขติดลบ TYPE_NUMBER_VARIATION_PASSWORD — สำหรับรหัส PIN ที่ตัวเลขแสดงเป็นอักขระที่ซ่อน การรวม number|numberDecimal|numberSigned สร้างช่องที่สมบูรณ์สำหรับการป้อนตัวเลขทศนิยมของทุกเครื่องหมาย

  • number — จำนวนเต็มบวก (อายุ, จำนวนสินค้า)
  • numberDecimal — ตัวเลขที่มีส่วนทศนิยม (ราคา, น้ำหนัก, ส่วนสูง)
  • numberSigned — ตัวเลขที่มีเครื่องหมาย (อุณหภูมิ, พิกัด)
  • numberPassword — การป้อนตัวเลขที่ซ่อนสำหรับรหัส PIN
kotlin
// การป้อนตัวเลขด้วยจุดทศนิยม
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// ตรวจสอบตัวเลขที่ป้อน
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0

Phone และ Email — แป้นพิมพ์เฉพาะทาง

TYPE_CLASS_PHONE เปิดใช้งานแป้นพิมพ์โทรศัพท์ ซึ่งแสดงตัวเลขและอักขระที่เฉพาะสำหรับหมายเลขโทรศัพท์: +, #, *, (, ) แตกต่างจากแป้นพิมพ์ตัวเลข phone ยังแสดงรูปแบบตัวอักษรในโหมดเพิ่มเติม เพราะหมายเลขโทรศัพท์อาจมีตัวอักษร (ตัวอย่าง 1-800-FLOWERS) คลาส phone ไม่มีแฟลกเพิ่มเติม แต่รองรับ TYPE_TEXT_VARIATION_PHONE_ETC สำหรับการป้อนหมายเลขอย่าง

TYPE_TEXT_VARIATION_EMAIL_ADDRESS เปิดใช้งานแป้นพิมพ์อีเมล โดยสัญลักษณ์ @ และจุดอยู่บนหน้าจอหลัก และส่วนขยายโดเมนที่พบบ่อย (.com, .net, .org) ก็มีให้เลือก Gboard แสดงปุ่มที่มีโดเมนยอดนิยมเมื่อพิมพ์หลัง @ แป้นพิมพ์อีเมลจะปิดการแก้ไขอัตโนมัติโดยอัตโนมัติ เพราะที่อยู่อีเมลอาจมีการรวมของอักขระที่ไม่ได้มาตรฐาน

ตามข้อมูลจาก Google Material Design Guidelines (2025) สำหรับช่องโทรศัพท์ แนะนำให้ระบุแอตทริบัวต์ android:digits เพิ่มเติม ซึ่งจำกัดชุดของอักขระที่ได้รับอนุญาต สำหรับช่องอีเมล การระบุ autofillHints="email" ก็มีความสำคัญเพื่อรองรับการเติมอัตโนมัติจากตัวจัดการรหัสผ่านและ 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 — แป้นพิมพ์สำหรับรหัสผ่าน

TYPE_TEXT_VARIATION_PASSWORD และ TYPE_NUMBER_VARIATION_PASSWORD เป็นโหมดการป้อนข้อมูลสำหรับข้อมูลที่อ่อนไหว เมื่อตั้ง textPassword อักขระที่ป้อนจะแสดงเป็นจุดหรือเครื่องหมายดาว (ขึ้นอยู่กับเวอร์ชัน Android และแป้นพิมพ์) แป้นพิมพ์ในโหมดนี้จะปิดการแก้ไขอัตโนมัติและการบันทึกคำที่ป้อนลงในพจนานุกรมของผู้ใช้ ป้องกันการรั่วไหลรหัสผ่านผ่านฟีเจอร์การป้อนแบบทำนาย

แป้นพิมพ์ Password ยังปิดการถ่ายหน้าจอของเนื้อหาในช่อง (แฟลก FLAG_SECURE) แม้ว่าพฤติกรรมนี้ขึ้นอยู่กับการนำไปใช้ของแป้นพิมพ์เฉพาะ เริ่มต้นแต่ Android 8.0 (API 26) แป้นพิมพ์รหัสผ่านรองรับการเติมอัตโนมัติผ่านตัวจัดการรหัสผ่านหากตั้งแอตทริบัวต์ importantForAutofill="yes"

ตามข้อมูลจาก Android Security Recommendations (2025) สำหรับช่องรหัสผ่าน แนะนำให้: ตั้ง maxLength เพื่อป้องกันรหัสผ่านที่ยาวเกินไป (ซึ่งอาจเป็นเวกเตอร์การโจมตีฐานข้อมูล), ใช้ inputType="textPassword" ร่วมกับ TextInputLayout และ endIconMode="password_toggle" เพื่อให้ผู้ใช้สามารถตรวจสอบรหัสผ่านที่ป้อนได้ก่อนส่งแบบฟอร์ม

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>

การตั้งค่า Keyboard Type ในโค้ด

การตั้งค่าแบบโปรแกรมของ Keyboard Type ช่วยให้สามารถเปลี่ยนโหมดแป้นพิมพ์ได้อย่างหลากหลายตามบริบทหรือข้อมูลที่ผู้ใช้ป้อน ตัวอย่างเช่น เมื่อเปลี่ยนชนิดของช่อง (ข้อความ/ตัวเลข/วันที่) หรือเมื่อเปลี่ยนเฮลร์ เมธอด setInputType() รับ InputType บิตมาส์และอัพเดตแป้นพิมพ์ทันทีหากช่องอยู่ในโฟกัส

การสลับชนิดแบบไดนามิก

kotlin
// สลับระหว่างการป้อนข้อความและตัวเลข
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)
}

การตรวจสอบชนิดปัจจุบัน

kotlin
// ตรวจสอบว่าช่องเป็นตัวเลขหรือไม่
fun isNumericInput(field: EditText): Boolean {
    val type = field.inputType
    return (type and InputType.TYPE_MASK_CLASS) ==
        InputType.TYPE_CLASS_NUMBER
}

// ตรวจสอบว่าเปิดใช้การแก้ไขอัตโนมัติหรือไม่
fun isAutoCorrectEnabled(field: EditText): Boolean {
    return (field.inputType and
        InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}

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

จะเกิดอะไรขึ้นหากไม่ระบุ Keyboard Type?

หากไม่ได้ระบุ inputType แล้ว EditText จะใช้ TYPE_CLASS_TEXT พร้อมกับแฟลก TYPE_TEXT_FLAG_MULTI_LINE โดยดีฟอล์ต ซึ่งหมายถึงแป้นพิมพ์ QWERTY มาตรฐานและการป้อนหลายบรรทัด สำหรับช่องส่วนใหญ่ แนะนำให้ระบุ inputType อย่างชัดเจนเพื่อให้แป้นพิมพ์ทำงานได้อย่างถูกต้องและการกรองอักขระ

จะสร้างแป้นพิมพ์ที่มีปุ่ม "Done" แทน "Enter" ได้อย่างไร?

ใช้แอตทริบัวต์ android:imeOptions="actionDone" บน EditText เรื่องนี้จะแทนที่ปุ่ม Enter ด้วยปุ่ม Done ตัวเลือกอื่น: actionSearch (แว่นขยาย), actionNext (ลูกศรริ้วขวา), actionSend (ส่ง) จัดการการกดผ่าน OnEditorActionListener ในโค้ด

สามารถปิดการสั่นของแป้นพิมพ์สำหรับช่องเฉพาะได้หรือไม่?

ไม่สามารถปิดการสั่นสำหรับช่องเฉพาะได้ — นี้เป็นการตั้งค่าระบบที่ผู้ใช้ควบคุมในการตั้งค่าแป้นพิมพ์ อย่างไรก็ตาม คุณสามารถป้องกันไม่ให้แป้นพิมพ์ปรากฏได้โดยการตั้งค่าแอตทริบัวต์ android:focusable="false" บน EditText หรือการเพิกการแสดงผ่าน dispatchTouchEvent

จะสร้างช่องอ่านอย่างเดียวแต่สามารถคัดลอกข้อความได้อย่างไร?

ตั้งค่า android:inputType="none" หรือเรียกโปรแกรม editText.setKeyListener(null) ช่องจะแสดงข้อความ แต่แป้นพิมพ์จะไม่ปรากฏเมื่อโฟกัส ผู้ใช้จะสามารถเลือกและคัดลอกข้อความได้ แต่ไม่สามารถแก้ไขได้ ตัวเลือกอื่นคือการใช้ TextView กับ textIsSelectable="true"

ทำไมแป้นพิมพ์จึงไม่เปลี่ยนหลัง setInputType()?

หลังจากเรียก setInputType() คุณจะต้องแสดงแป้นพิมพ์อีกครั้ง เพราะระบบอาจไม่อัพเดต IME โดยอัตโนมัติ เรียก InputMethodManager.restartInput(view) เพื่อบังคับให้อัพเดต หากช่องไม่ได้รับโฟกัส ให้เรียก requestFocus() ก่อน จากนั้น restartInput

สรุป

  • Keyboard Type กำหนดรูปแบบ การกรอง และพฤติกรรมของแป้นพิมพ์สำหรับช่องป้อนข้อมูล Android
  • text — แป้นพิมพ์ QWERTY มาตรฐานพร้อมตัวแก้ไขสำหรับการแก้ไขอัตโนมัติ การพิมพ์ใหญ่ และหลายบรรทัด
  • number — แป้นพิมพ์ตัวเลขสำหรับจำนวนเต็มและทศนิยมพร้อมตัวเลือก signed และ decimal
  • phone — แป้นพิมพ์โทรศัพท์พร้อมตัวเลข, +, #, * และรองรับหมายเลขที่เป็นตัวอักษร
  • email — แป้นพิมพ์ที่มี @, จุด และการเข้าถึงส่วนขยายโดเมนอย่างรวดเร็ว
  • textPassword — การป้อนที่ซ่อนโดยปิดการแก้ไขอัตโนมัติและการบันทึกในพจนานุกรม
  • imeOptions กำหนดค่าปุ่มการกระทำบนแป้นพิมพ์: Done, Search, Next, Send

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

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

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

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