Keyboard Type은 Android에서 가상 키보드의 구성으로, 특정 입력 필드에 표시할 문자 집합과 레이아웃을 정의합니다. Android는 다양한 사전 설정 유형을 지원합니다: text(표준 텍스트), number(숫자), phone(전화), email(@ 기호 포함), textPassword(비밀번호용), datetime 등. 각 유형은 특정 작업에 맞게 입력 인터페이스를 최적화합니다. 예를 들어, 이메일 키보드는 메인 화면에 @ 기호와 점을 표시합니다. Android Developers (2026)에 따르면, 올바른 Keyboard Type을 선택하면 표준 텍스트 키보드와 비교하여 키 입력 수가 20~40% 감소합니다.
주요 내용
Keyboard Type은 XML의 android:inputType 속성 값이나 코드에서 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는 지정된 입력 유형을 엄격히 따릅니다.
// 프로그래매틱 키보드 유형 설정
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
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, 이메일)의 경우 자동 수정이 올바른 용어를 잘못된 용어로 대체하는 경우가 많으므로 자동 수정을 비활성화하는 것이 좋습니다.
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER는 숫자 키보드를 활성화하며, 숫자, 소수점 구분 기호 및 빼기 기호만 표시합니다. 이 유형은 수량, 가격, 나이, 코드 및 기타 숫자 데이터의 입력 필드에 사용됩니다. 숫자 키보드는 텍스트 키보드보다 화면 공간을 적게 차지하며 실수로 문자를 입력하는 것을 방지합니다.
Number에는 세 가지 수정자가 있습니다: TYPE_NUMBER_FLAG_DECIMAL은 소수점/쉼표를 추가하고, TYPE_NUMBER_FLAG_SIGNED는 음수에 빼기 기호를 추가하며, TYPE_NUMBER_VARIATION_PASSWORD는 PIN 코드용(숫자가 숨겨진 문자로 표시됨)입니다. number|numberDecimal|numberSigned 조합은 모든 부호의 부동 소수점 숫자를 입력하기 위한 완전한 필드를 만듭니다.
// 소수점이 있는 숫자 입력
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// 입력된 숫자 확인
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
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 속성을 추가로 지정하는 것이 좋습니다. 이메일 필드의 경우 비밀번호 관리자와 Google Autofill의 자동 채우기를 지원하기 위해 autofillHints="email"을 지정하는 것도 중요합니다.
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"
<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"
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"과 함께 사용.
<!-- 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의 프로그래매틱 설정은 컨텍스트나 사용자 입력에 따라 키보드 모드를 동적으로 변경할 수 있게 합니다. 예를 들어, 필드 유형(텍스트/숫자/날짜) 전환 시 또는 로케일 변경 시. setInputType() 메서드는 InputType 비트마스크를 받아들이고 필드가 포커스된 경우 즉시 키보드를 업데이트합니다.
// 텍스트 입력과 숫자 입력 간 전환
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)
}
// 필드가 숫자형인지 확인
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
}
자주 묻는 질문
inputType이 지정되지 않은 경우 EditText는 기본적으로 TYPE_CLASS_TEXT와 TYPE_TEXT_FLAG_MULTI_LINE 플래그를 사용합니다. 즉, 표준 QWERTY 키보드와 여러 줄 입력입니다. 대부분의 필드에서 올바른 키보드 동작과 문자 필터링을 보장하려면 inputType을 명시적으로 지정하는 것이 좋습니다.
EditText에서 android:imeOptions="actionDone" 속성을 사용하세요. 그러면 Enter 버튼이 Done 버튼으로 대체됩니다. 다른 옵션: actionSearch(돋보기), actionNext(오른쪽 화살표), actionSend(보내기). 코드에서 OnEditorActionListener를 통해 누름 처리를 구현하세요.
특정 필드의 진동을 비활성화할 수 없습니다 — 이는 사용자가 키보드 설정에서 제어하는 시스템 설정입니다. 그러나 EditText에 android:focusable="false" 속성을 설정하거나 dispatchTouchEvent를 통해 표시를 재정의하여 키보드가 완전히 나타나지 않도록 방지할 수 있습니다.
android:inputType="none"을 설정하거나 프로그래매틱 방식으로 editText.setKeyListener(null)을 호출하세요. 필드는 텍스트를 표시하지만 포커스 시 키보드가 나타나지 않습니다. 사용자는 텍스트를 선택하고 복사할 수 있지만 편집할 수는 없습니다. 대안으로 textIsSelectable="true"가 있는 TextView를 사용하는 방법이 있습니다.
setInputType() 호출 후 시스템이 IME를 자동으로 업데이트하지 않을 수 있으므로 키보드를 다시 표시해야 합니다. InputMethodManager.restartInput(view)를 호출하여 강제로 업데이트하세요. 필드가 포커스되지 않은 경우 먼저 requestFocus()를 호출한 다음 restartInput을 호출하세요.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.