web-dev-qa-db-de.com

InputType für einen EditText programmgesteuert festlegen?

Wie legen wir den Eingabetyp für einen EditText programmgesteuert fest? Ich versuche:

mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

es scheint keine Wirkung zu haben.

188
user246114

Gemäß den TextView-Dokumenten ist die programmatische Version von Android: password setTransformationMethod () , nicht setInputType (). So etwas wie:

mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());

sollte den Trick tun.

197
rascalking

Um den Eingabetyp für einen EditText programmgesteuert festzulegen, müssen Sie als Eingabeklassentyp Text angeben.

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

ich habe alles mit gelöst

.setInputType(InputType.TYPE_CLASS_NUMBER);

für klare Daten und 

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

um die Punkte zu sehen (wenn die Daten eine Zahl sind, ist es keine Wahl für eine andere Klasse)

26
skinflint

Hier sind die verschiedenen Eingabetypen, die auf der Standardtastatur angezeigt werden.

input types demo

Den Eingangstyp programmgesteuert einstellen

editText.setInputType(InputType.TYPE_CLASS_TEXT);

Weitere Optionen neben TYPE_CLASS_TEXT finden Sie in der Dokumentation .

Festlegen des Eingabetyps in XML

<EditText
    Android:inputType="text"
/>

Weitere Optionen neben text finden Sie in der Dokumentation .

Zusatzcode

Hier ist der Code für das Bild oben.

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_TEXT_FLAG_IME_MULTI_LINE));
        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;
        }
    }
}

Siehe auch

13
Suragch

Nur Zahlen zulassen: 

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

So transformieren Sie das Passwort: 

password1.setTransformationMethod(PasswordTransformationMethod.getInstance());
13
slinden77
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);

// Sie können TYPE _... entsprechend Ihrer Anforderung ändern.

7
Ajeet

Dies kann für andere wie mich hilfreich sein, die zwischen Passwort- und Freitext-Modus wechseln möchten. Ich habe versucht, die vorgeschlagenen Eingabemethoden zu verwenden, aber es funktionierte nur in eine Richtung. Ich könnte vom Passwort zum Text wechseln, aber dann konnte ich nicht zurückkehren. Verwenden Sie für diejenigen, die versuchen, einen Umschalter (z. B. ein Kennwort anzeigen) zu verwenden

       @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");
            }
        }

Ich muss dies für die Lösung gutschreiben. Ich wünschte, ich hätte das vor ein paar Stunden gefunden!

2
Brian Reinhold

Ich weiß, dass die erwartete Antwort in Java ist. Aber hier sind meine 2 Cent Ratschläge, die immer versuchen, View-bezogene Dinge in XML (mindestens grundlegende Dinge) zu behandeln, deshalb würde ich vorschlagen, lieber ein xml -Attribut zu verwenden, als diesen Anwendungsfall in Java

    <EditText
     Android:inputType="textPassword"/>
0
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);

außerdem müssen Sie darauf achten, dass sich der Cursor nach dem Aufrufen dieser Funktion an den Startpunkt des editText bewegt. Stellen Sie also sicher, dass Sie den Cursor wieder an den Endpunkt bewegen.

0

So blenden Sie das Passwort ein: editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

So verstecken Sie das Passwort erneut: editText.setTransformationMethod(PasswordTransformationMethod.getInstance());

0
aap

Fügen Sie dies dem EditText/TextView-Tag in Ihrem Layout hinzu

Android:password="true"

Edit: Ich lese gerade Ihren Post noch einmal, vielleicht müssen Sie dies nach der Konstruktion tun. Ich kann nicht verstehen, warum dein Snippet nicht funktioniert.

0
Jim Blackler

Verbergen:

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

Show:

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

Für Kotlin:

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