EingabeType für einen EditText programmgesteuert festlegen?
-
24-09-2019 - |
Frage
Wie setzen wir den Eingangstyp für ein EditText programmatisch fest? Ich versuche:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
Es scheint keine Wirkung zu haben.
Lösung
Laut dem TextView docs, Die programmatische Version von Android: Passwort ist settransformationMethod (), nicht setInputType (). Also so etwas wie:
mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
sollte den Trick machen.
Andere Tipps
Um den Eingabetyp für einen EditText programmgesteuert festzulegen, müssen Sie angeben, dass der Eingabetyp Text ist.
editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Ich habe alle mit gelöst mit
.setInputType(InputType.TYPE_CLASS_NUMBER);
für siehe klare Daten und
.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
Für sehen die Punkte (wenn die Daten eine Nummer sind, ist es keine Wahl, eine andere Klasse).
Hier sind die verschiedenen Eingangstypen, wie auf der Standardtastatur gezeigt.
Stellen Sie den Eingangstyp programmatisch fest
editText.setInputType(InputType.TYPE_CLASS_TEXT);
Andere Optionen außerdem TYPE_CLASS_TEXT
kann in der gefunden werden Dokumentation.
Festlegen des Eingangstyps in XML
<EditText
android:inputType="text"
/>
Andere Optionen außerdem text
kann in der gefunden werden Dokumentation.
Ergänzungscode
Hier ist der Code für das obige Bild.
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
Nur Zahlen zuzulassen:
password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);
Um das Passwort zu verwandeln (auszublenden):
password1.setTransformationMethod(PasswordTransformationMethod.getInstance());
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
// Sie können den Typ _... entsprechend Ihrer Anforderung ändern.
Dies kann für andere wie mich hilfreich sein, die zwischen Kennwort und Freistextmodus wechseln wollten. Ich habe versucht, die vorgeschlagenen Eingabemethoden zu verwenden, aber es funktionierte nur in eine Richtung. Ich könnte vom Passwort zu Text wechseln, aber dann konnte ich nicht zurückkehren. Für diejenigen, die versuchen, einen Umschalter zu verarbeiten (z. B. Kontrollkennwort für das Anzeigenkennwort)
@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 gutschreiben Dies für die Lösung. Ich wünschte, ich hätte das vor ein paar Stunden gefunden!
Für Kotlin:
val password = EditText(this)
password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
password.hint = "Password"
Fügen Sie dies in Ihr Layout zum Tag der Bearbeitungstext/TextView hinzu
android:password="true"
Bearbeiten: Ich habe Ihren Beitrag nur noch einmal gelesen, vielleicht müssen Sie dies nach dem Bau tun. Ich verstehe nicht, warum Ihr Ausschnitt nicht funktionieren würde.
Ich weiß, die erwartete Antwort ist in Java
. Aber hier sind meine 2 Cent Beratung immer versuchen, verwandte Dinge in den Ansehen zu behandeln XML
(mindestens grundlegende Dinge), also würde ich vorschlagen, lieber a zu verwenden xml
Attribut, anstatt diesen Anwendungsfall zu bearbeiten java
<EditText
android:inputType="textPassword"/>
Ausblenden:
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);
Zeigen:
edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
Außerdem müssen Sie darauf achten, dass Cursor nach dem Aufrufen dieser Funktion zum Ausgangspunkt des EditText geht. Stellen Sie also sicher, dass Sie den Cursor wieder zum Endpunkt verschieben.
Zum Passwort abzusetzen:
editText.setInputType(
InputType.TYPE_CLASS_TEXT|
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
);
Um das Passwort erneut auszublenden:editText.setTransformationMethod(PasswordTransformationMethod.getInstance());