프로그래밍 방식으로 EditText의 inputType을 설정 하시겠습니까?


216

프로그래밍 방식으로 EditText의 입력 유형을 어떻게 설정합니까? 노력하고있어:

mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

효과가없는 것 같습니다.

답변:


213

TextView docs 에 따르면 android : password의 프로그래밍 버전은 setInputType ()이 아니라 setTransformationMethod ()입니다. 그래서 같은 :

mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());

트릭을해야합니다.


4
여기에 추가하려면 setInputType 대신 setTransformationMethod를 호출해야합니다 . setTransformationMethod 다음에 setInputType을 호출하면 EditText가 다시 암호 모드에 있지 않습니다.
Paul Ryland

11
이 답변은 묻는 질문에 잘못되었습니다. 입력 한 텍스트 만 변환합니다 EditText(문자를 암호 점으로 바꿉니다). 이것은 EditText그 자체 로 입력 될 수있는 것에 영향을 미치지 않습니다 .
slinden77

4
setInputType은 궁극적으로 내부에서 setTransformationMethod를 호출하므로 TYPE_TEXT_VARIATION_PASSWORD를 setInputType에 전달하면 자동으로 수행됩니다. setInputType을 호출 한 후 setSingleLine을 호출하면 문제가 발생하는 것 같습니다. setInputType을 호출하면 setTransformationMethod를 null 또는 한 줄 변환기로 호출하여 암호 변환기를 지 웁니다.
sparkym3

setTransformationMethod (PasswordTransformationMethod.getInstance ()) 호출 후 편집 할 수 없음
sujith s

그러나 암호 필드를 사용하는 시간이 옆에 제안 텍스트에 표시됩니다
게리 데이비스에게

408

프로그래밍 방식으로 EditText의 입력 유형을 설정하려면 입력 클래스 유형이 텍스트임을 지정해야합니다.

editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

2
당신의 팁은 나를 위해 완벽하게 작동했습니다! 프로그래밍 방식으로 입력 유형을 여러 줄로 설정하는 것과 비슷한 문제가있었습니다.
Anna Lam

여기에 비트 단위 OR 연산자를 갖는 것이 어떤 의미입니까? 죄송합니다. Android를 처음 사용합니다.
sanjeev

InputType에 동의하지 않습니다 .TYPE_TEXT_VARIATION_PASSWORD는 작동하지 않지만 setTransformationMethod (PasswordTransformationMethod.getInstance ()); 않습니다!
Lluis Felisart

38

표준 키보드에 표시된 다양한 입력 유형은 다음과 같습니다.

입력 유형 데모

프로그래밍 방식으로 입력 유형 설정

editText.setInputType(InputType.TYPE_CLASS_TEXT);

그 밖의 다른 옵션 TYPE_CLASS_TEXT설명서 에서 찾을 수 있습니다 .

XML에서 입력 유형 설정

<EditText
    android:inputType="text"
/>

그 밖의 다른 옵션 text설명서 에서 찾을 수 있습니다 .

보충 코드

위 이미지의 코드는 다음과 같습니다.

public class MainActivity extends AppCompatActivity {

    EditText editText;
    TextView textView;
    List<InputTypeItem> inputTypes;
    int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);
        initArray();
    }

    public void onChangeInputTypeButtonClick(View view) {
        if (counter >= inputTypes.size()) {
            startOver();
            return;
        }
        textView.setText(inputTypes.get(counter).name);
        editText.setInputType(inputTypes.get(counter).value);
        editText.setSelection(editText.getText().length());
        counter++;
    }

    private void startOver() {
        counter = 0;
        textView.setText("");
        editText.setInputType(InputType.TYPE_CLASS_TEXT);
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }


    private void initArray() {
        inputTypes = new ArrayList<>();
        inputTypes.add(new InputTypeItem("date",  InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE));
        inputTypes.add(new InputTypeItem("datetime", InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("none", InputType.TYPE_NULL));
        inputTypes.add(new InputTypeItem("number",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("numberDecimal",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL));
        inputTypes.add(new InputTypeItem("numberPassword",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD));
        inputTypes.add(new InputTypeItem("numberSigned", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED));
        inputTypes.add(new InputTypeItem("phone",  InputType.TYPE_CLASS_PHONE));
        inputTypes.add(new InputTypeItem("text",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("textAutoComplete", InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE));
        inputTypes.add(new InputTypeItem("textAutoCorrect",  InputType.TYPE_TEXT_FLAG_AUTO_CORRECT));
        inputTypes.add(new InputTypeItem("textCapCharacters",  InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS));
        inputTypes.add(new InputTypeItem("textCapSentences",  InputType.TYPE_TEXT_FLAG_CAP_SENTENCES));
        inputTypes.add(new InputTypeItem("textCapWords",  InputType.TYPE_TEXT_FLAG_CAP_WORDS));
        inputTypes.add(new InputTypeItem("textEmailAddress",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS));
        inputTypes.add(new InputTypeItem("textEmailSubject", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT));
        inputTypes.add(new InputTypeItem("textFilter",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_FILTER));
        inputTypes.add(new InputTypeItem("textLongMessage",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE));
        inputTypes.add(new InputTypeItem("textMultiLine",  InputType.TYPE_TEXT_FLAG_MULTI_LINE));
        inputTypes.add(new InputTypeItem("textNoSuggestions", InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS));
        inputTypes.add(new InputTypeItem("textPassword",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD));
        inputTypes.add(new InputTypeItem("textPersonName", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME));
        inputTypes.add(new InputTypeItem("textPhonetic",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PHONETIC));
        inputTypes.add(new InputTypeItem("textPostalAddress", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS));
        inputTypes.add(new InputTypeItem("textShortMessage", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE));
        inputTypes.add(new InputTypeItem("textUri",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI));
        inputTypes.add(new InputTypeItem("textVisiblePassword",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD));
        inputTypes.add(new InputTypeItem("textWebEditText",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT));
        inputTypes.add(new InputTypeItem("textWebEmailAddress", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS));
        inputTypes.add(new InputTypeItem("textWebPassword", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD));
        inputTypes.add(new InputTypeItem("time", InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME));
    }

    class InputTypeItem {
        private String name;
        private int value;
        InputTypeItem(String name, int value) {
            this.name = name;
            this.value = value;
        }
    }
}

또한보십시오


29

나는 모든 것을 해결했다

.setInputType(InputType.TYPE_CLASS_NUMBER);

명확한 데이터를 참조하십시오

.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

점을 참조하십시오 (데이터가 숫자이면 다른 클래스를 선택하지 않습니다)


감사합니다! 한 가지 질문은, 일반 텍스트에서 비밀번호 유형으로 변경할 때 왜 '또는'을 추가해야합니까? 왜 이렇게 간단하게 할 수 없습니까? .setInputType (InputType.TYPE_NUMBER_VARIATION_PASSWORD) ;? 시도했지만 작동하지 않았습니다.
UnknownUser

15

숫자 만 허용하려면 :

password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);

비밀번호를 변환 (숨기기)하려면 다음을 수행하십시오.

password1.setTransformationMethod(PasswordTransformationMethod.getInstance());

7
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);

// 요구 사항에 따라 TYPE _...을 (를) 변경할 수 있습니다.


5

코 틀린의 경우 :

    val password = EditText(this)
    password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
    password.hint = "Password"

4

이것은 암호와 자유 텍스트 모드 사이를 전환하려는 저 같은 다른 사람들에게 도움이 될 수 있습니다. 제안 된 입력 방법을 사용해 보았지만 한 방향으로 만 작동했습니다. 암호에서 텍스트로 갈 수 있었지만 되돌릴 수 없었습니다. 토글 (예 : 비밀번호 표시 확인란)을 처리하려는 경우

       @Override
        public void onClick(View v)
        {
            if(check.isChecked())
            {
                edit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                Log.i(TAG, "Show password");
            }
            else
            {
                edit.setTransformationMethod(PasswordTransformationMethod.getInstance());
                Log.i(TAG, "Hide password");
            }
        }

나는 이것을 해결책 으로 인정 해야한다. 몇 시간 전에 발견했으면 좋겠다!


1

비밀번호 숨기기를 해제하려면

editText.setInputType(
      InputType.TYPE_CLASS_TEXT|
      InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
);

비밀번호를 다시 숨기려면

editText.setTransformationMethod(PasswordTransformationMethod.getInstance());

0

이것을 레이아웃의 EditText / TextView 태그에 추가하십시오

android:password="true"

편집 : 난 그냥 당신의 게시물을 다시 읽고 아마도 건설 후이 작업을 수행해야합니다. 스 니펫이 작동하지 않는 이유를 모르겠습니다.


이 경우 레이아웃 파일이 없으며 필드가 프로그래밍 방식으로 생성됩니다.
user246114

예, 건설 후에 완료되었지만 왜 작동하지 않는지 확실하지 않습니다!
user246114

6
이 옵션은 더 이상 사용되지 않습니다 !!
swiftBoy

이 것은 오래된 안드로이드 2.3에서 작동하는 유일한 것입니다. 나는 대답을 upvoted했습니다.
djdance

0

예상 답변이에 있음을 알고 Java있습니다. 그러나 여기 2 센트의 조언은 항상 XML( 관련된 기본 항목) 보기 관련 항목을 처리하려고 하므로이 xml사용 사례를 처리 하는 대신 속성을 사용하는 것이 좋습니다 .java

    <EditText
     android:inputType="textPassword"/>

2
경우에 따라 필드에 입력 한 비밀번호 숨기기 / 표시와 같은 다른 입력 유형간에 전환 할 수 있습니다.
William

1
그러나 EditText에는 암호를 표시하거나 숨길 수있는 옵션이있어 직접 암호를 입력 할 필요가 없으며 멋진 애니메이션을 제공합니다.
pratham kesarkar

정보 주셔서 감사합니다, 여기에 그것을 보았습니다 stackoverflow.com/a/41163578/3310235
William

0

숨는 장소:

edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);

보여 주다:

edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);                    
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());

0
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);

또한이 함수가 호출 된 후 커서가 editText의 시작점으로 이동하도록주의해야하므로 커서를 끝점으로 다시 이동해야합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.