기본적으로 숫자 키패드가있는 EditText,하지만 알파벳 문자 허용


82

EditText 상자가 있고 대부분의 경우 사용자가 숫자를 입력하기 때문에 숫자 키패드로 선택 될 때 나타나는 기본 키보드를 원합니다 . 하지만 필요한 경우 사용자가 영문자를 입력 할 수 있도록하고 싶습니다. 사용 android:inputType="number"은 입력을 숫자로만 제한합니다. 어떤 옵션이 있습니까?


2
? 안녕 하란 같은 구현해야 예는 다음 주를 기쁘게 경우 해결책을 가지고 있습니다
Bansal_Sneha

사용자가 숫자로만 시작하고 1 자리 이상 뒤에 영숫자를 입력 할 수 있도록 하시겠습니까?
dhuma1981


가능한 중복. 이에 대답 질문 유사 포스트
hrk_er

답변:


16

다음과 같이 XML에서 EditText를 정의하십시오.

<EditText 
    android:id="@+id/txtOppCodigoCliente"
    android:inputType="textVisiblePassword"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxLength="11"
    android:hint="@string/strCodigoCliente"/>

출력 : android : inputType = "textVisiblePassword"

숫자 행과 나머지 문자.


3
이것은 선택된 대답이어야합니다!
Tash Pemhiwa

키보드에 따라 다릅니다. 제 경우에는 Google 키보드 및 누가의 마지막 버전에서 작동하지 않습니다.
fireb86

당신은 문제를 해결 했나
애쉬 윈 S 쇼크를

this._editText.setInputType (InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); this._editText.setTypeface (Typeface.DEFAULT); 나를 위해 작동
xevser

@ fireb86은 최신 버전의 Gboard에서 작동합니다. 그리고 그것은 Oreo에서 완벽하게 잘 작동합니다.
Tim John

11

더 강력한 솔루션을 제안합니다.

사용자에게 입력 유형을 선택할 수있는 기능을 제공합니다.

필요한 수정 사항

- 입력 선택 버튼 표시 / 숨기기 개선

- 입력 유형이 문자 인 경우 제안을 제거 할 수 있습니다.

여기에 이미지 설명 입력

활동은 다음과 같습니다.

package mobi.sherif.numberstexttextview;

import android.os.Bundle;
import android.app.Activity;
import android.text.InputType;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;

public class MainActivity extends Activity {

    EditText mEdit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEdit = (EditText) findViewById(R.id.input);
        mEdit.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View view, boolean focused) {
                findViewById(R.id.llmenu).setVisibility(focused?View.VISIBLE:View.GONE);
            }
        });
    }

    public void onNumbers(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
    }

    public void onLetters(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_TEXT);
    }

}

활동의 xml은 다음과 같습니다. activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignWithParentIfMissing="true"
        android:layout_above="@+id/llmenu" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <EditText
                android:id="@+id/input"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="number" >

                <requestFocus />
            </EditText>
        </LinearLayout>
    </ScrollView>

    <LinearLayout
        android:id="@+id/llmenu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#000000"
        android:padding="0dp" >

        <Button
            android:id="@+id/buttonnumbers"
            android:layout_width="0dp"
            android:onClick="onNumbers"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="Numbers" />

        <Button
            android:id="@+id/buttonletters"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:onClick="onLetters"
            android:text="Letters" />
    </LinearLayout>

</RelativeLayout>

숫자가 inputTypes 중 하나이고 키보드가 전체 화면 모드 (가로 모드)이면 문자가 숨겨집니다. TEXT inputType으로 다시 전환하면 다시 나타납니다.
원 월드

10

찾고있는 내용은 다음과 같습니다.

다음 EditText과 같이 xml에서 정의하십시오 .

<EditText
    android:id="@+id/etTest"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/hint">

</EditText>

그리고 다음을 호출하십시오 onCreate().

etTest = (EditText) findViewById(R.id.etTest);
etTest.setRawInputType(InputType.TYPE_CLASS_NUMBER);
// Note the "Raw"

EditText지금 을 클릭 할 때마다 숫자와 문자를 입력 할 수 있습니다 ! (숫자 키보드가 먼저 표시됨)


3
Nexus 7에서는 숫자 패드가 표시되었지만 일반 키보드를 표시 할 방법이 없었습니다.
Rob

유망 해 보였지만 숫자가 inputTypes 중 하나이고 키보드가 전체 화면 모드 (가로 모드)이면 문자가 숨겨집니다.
원 월드

8

불행히도 이것은 EditText에 대해 하나의 inputType 만 설정할 수 있기 때문에 불가능합니다. 다음은 버튼에 알파벳 문자 만 표시합니다.

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text|number" />

그러나 내가 제안 할 수있는 것은 입력 유형을 숫자로 설정하고 숫자 패드에 가까운 양식에 작은 switchKeyboard 버튼을 추가하는 것입니다. 그리고 onClick을 설정하십시오.

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

사용자가 알파벳 문자로도 전환 할 수 있습니다.


그 이유는 문서에 있습니다. 상수 이름을 자세히 살펴보십시오. 하나의 클래스와 하나의 변형 및 하나의 플래그 만 결합 할 수 있습니다. 처럼 TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_SIGNED. 하지만 당신은 같은 클래스를 혼합 할 수 없습니다 결코 numbertext
월드

문서에는 클래스를 혼합 할 수 없다고 명시되어 있지 않습니다. 그것에 대해 불평하는 보푸라기 검사가 없습니다. 그리고 결합 할 때 특정 키보드도 있습니다. 예를 들어 number|text(위 참조) 길게 눌러 문자를 입력 할 수 있음을 의미하며 실제로 작동하지 않습니다. 나에게 다소 버그가 있거나 적어도 불완전 해 보입니다.
masc3d

@ masc3d-동의 한 문서가 어디에 있어야한다고 말하지 않습니다. InputType 아래 에 설명되어 있습니다 TYPE_MASK_CLASS. 제공되는 텍스트의 전체 클래스를 결정하는 비트 마스크. 지원되는 클래스는 TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE, TYPE_CLASS_DATETIME입니다. IME 작성자 : 이해하는 클래스가 아닌 경우 변형이나 플래그가없는 TYPE_CLASS_TEXT로 가정하십시오. "
ToolmakerSteve

6

기본적으로 EditText inputtype은 EditText 에서 입력 유형설정하는 데 사용됩니다 .

에 가능한 값은 다음 android:inputtype과 같습니다.

  • 본문
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • textFilter
  • textPhonetic
  • 번호
  • numberSigned
  • numberDecimal
  • 전화
  • 날짜 시간
  • 데이트
  • 시각

그런 다음 예와 같이 모든 값을 사용할 수 있습니다.

<EditText android:id="@+id/EditText01"
 android:layout_height="wrap_content"
 android:layout_width="fill_parent"
 android:inputType="number"
 android:text="1212223"/>

3
감사! 이 모든 것을 나열하는 Google Android 문서도 찾을 수 없었습니다!
gimmegimme

4

Asus 태블릿에는 이러한 기능이 있으며 기본 키보드를 사용자 정의했습니다. 그리고 키보드에는 숫자와 알파벳 만 포함되어 있습니다. 귀하의 요구 사항 솔루션은 기본 키보드를 사용자 정의하는 것입니다.


2

Paresh Mayani 답변을 따를 수 있습니다.

그리고 조언 android:inputType="textPhonetic"에서 사용자 선택에 따라 inputType 텍스트 및 숫자에 사용할 수 있습니다 .

내 요점을 알기를 바랍니다.


2

활동의 OnCreate에서 다음을 수행하십시오.

    t = (EditText) findViewById(R.id.test);
    t.setKeyListener(new KeyListener() {

        @Override
        public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyOther(View view, Editable text, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {
            if (keyCode == 67) { // Handle backspace button =)
                if (text.length() > 0) {
                    t.setText(text.subSequence(0, text.length() - 1));
                    t.setSelection(text.length()-1);
                }
            }
            return false;
        }

        @Override
        public int getInputType() {
            return InputType.TYPE_CLASS_NUMBER;
        }

        @Override
        public void clearMetaKeyState(View view, Editable content, int states) {

        }
    });

이 경우 is를 입력하면 numberandroid에 숫자 키보드가 표시되지만 원하는대로 입력 할 수 있습니다. 또한 원하는대로 다른 메서드를 재정의 할 수 있습니다.


키보드가 전체 화면 모드 일 때 가로 모드에서 사용해 보셨습니까?
원 월드

2

내가 그것을 달성 한 방법은 다음과 같습니다.

android : inputType = "textPhonetic | numberDecimal"android : digits = "/ 0123456789.abcdefghijklmnopqrstuvwxyz"

숫자로 지정된 문자 만 허용됩니다.

표시된 키보드는 일반 키보드가 아니라 다이얼러의 키보드입니다. 저에게는 XML 내에서 전적으로 필요한 것을 달성했습니다.


1
입력 클래스를 혼합하지 마십시오. 그들은 항상 숫자가 될 것입니다. 참조 stackoverflow.com/questions/3544214/...
월드

/ 마이너스 연산자 - ""덕분에, 난 단지 전체 번호를 사용하는 데 필요한 slamn
gimmegimme

2

이 경우 inputType 필터를 사용하지 말고 EditText 속성에 아래 줄을 추가하십시오.

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "

이제 이러한 문자 만 EditText에 입력 할 수 있습니다. 편집 텍스트의 전체 코드는 다음과 같습니다.

<EditText
 android:id="@+id/etTest"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:ems="10"
 android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
 android:hint="@string/hint">


1
완벽한 솔루션! 감사합니다 !
BSQ

1

다음과 같은 토글 버튼이있는 것은 어떨까요?

  • 숫자 값만 허용하도록 입력 유형을 설정합니다.
  • QWERTY 키보드를 사용할 수 있도록 입력 유형을 설정합니다.
  • 또는 다른 입력 유형 설정 (필요한 경우)

이렇게하면 숫자 키패드를 기본값으로 설정 한 다음 사용자가 버튼을 눌러 변경할 수 있습니다.


1

현재 기본 Android 입력 유형이 다양한 휴대 전화에서 제공되므로 이는 불가능합니다 .

답변에 일반적으로 포함되는 원시 입력 유형을 설정하는 일반적인 방법과 같이 일부 키보드에서는 작동하지만 다른 키보드에서는 작동하지 않는 가능한 해킹 이 많이 있습니다.

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

내가 찾을 수있는 가장 좋은 조언은 textPostalAddressXML에서 입력 유형 을 사용하는 것입니다 .

  • android:inputType="textPostalAddress"

불행히도 이것은 우리가 원하는 것을 아직 수행 하지 못하지만 앞으로는 그렇게 될 것 입니다. 이것의 유일한 장점은 편집 상자의 메타 정보가 의도 한 내용을 반영한다는 것입니다.


1

프로그래밍 방식으로 일반적인 흐름을 약간 조정하면 가능합니다. 먼저 editText를 다음과 같이 설정해야합니다.

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

그런 다음 keyevent를 들어야합니다. 파운드를 누르면 InputType을 다시 InputType.TYPE_CLASS_TEXT로 설정합니다. 이것은 나를 위해 작동하는 것처럼 작동합니다.

editText.setOnKeyListener(new View.OnKeyListener() 
{
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
     // TODO Auto-generated method stub
     Log.d("KeyBoard", "Keyboard Test Key Hit");

        switch (keyCode) 
        {
              KeyEvent.KEYCODE_POUND:

              if(editText.setInputType(InputType.TYPE_CLASS_TEXT);
              {                             
                   editText.setInputType(InputType.TYPE_CLASS_TEXT);
                   return true;
              }
         }
     }
}  

0

설정을 시도 할 수 있습니다 ---

editText.setRawInputType(Configuration.KEYBOARD_QWERTY);

에 대한 더 설명


1
Configuration.KEYBOARD_QWERTY == InputType.TYPE_CLASS_NUMBER == 2
Enyby

0

textView 코드에서 android : inputType의 "텍스트"를 제거하십시오.

그것은해야한다,

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />

이것은 그의 문제를 해결하지 못합니다. 그는 숫자 키보드로 문자와 숫자를 허용하고 싶어
월드

0

프로그래밍 방식으로이 작업을 수행 할 수 있습니다.

// Numbers
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER);

// Text
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);

setInputType (int type) inputType에 대해 정의 된 상수로 컨텐츠의 유형을 설정합니다.


0

Saurav가 말했듯이 가장 좋은 방법은 간단한 리스너로 QWERTY Keyboard와 Numeric Keyborad간에 변경하는 것입니다.

input.setInputType(InputType.TYPE_CLASS_TEXT);

input.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        switch (keyCode) {
        case 24: // Volumen UP

             input.setInputType(InputType.TYPE_CLASS_NUMBER);
             break;
         case 25: // Volumen DOWN

             input.setInputType(InputType.TYPE_CLASS_TEXT);
             break;
        }
        return true;
    }
});

0

나는 모든 방법을 시도하지만 완벽하지는 않습니다. 그래서 다른 생각이 있습니다. 모든 키보드에 완벽하게 작동합니다.

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reset_password);
    editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);


    // Checks whether a hardware keyboard is available
    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
        Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
        if (editText.isFocused()) {
            editText.setInputType(InputType.TYPE_CLASS_TEXT);
        }

    } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
        if (editText.getInputType() == InputType.TYPE_CLASS_TEXT) {
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
        }
    }
}

-2

EditText의 xml 레이아웃에서 다음 매개 변수를 추가하십시오.

android:inputType="number|text"

이를 통해 사용자는 텍스트와 숫자를 모두 입력 할 수 있으며 활동이나 조각에 코드를 포함하지 않고 xml에 논리를 포함 할 수 있습니다.


3
입력 클래스를 혼합하지 마십시오. 그들은 항상 숫자가 될 것입니다. 참조 stackoverflow.com/questions/3544214/...
월드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.