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.
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.
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);
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)
Hier sind die verschiedenen Eingabetypen, die auf der Standardtastatur angezeigt werden.
editText.setInputType(InputType.TYPE_CLASS_TEXT);
Weitere Optionen neben TYPE_CLASS_TEXT
finden Sie in der Dokumentation .
<EditText
Android:inputType="text"
/>
Weitere Optionen neben text
finden Sie in der Dokumentation .
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;
}
}
}
Nur Zahlen zulassen:
password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);
So transformieren Sie das Passwort:
password1.setTransformationMethod(PasswordTransformationMethod.getInstance());
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
// Sie können TYPE _... entsprechend Ihrer Anforderung ändern.
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!
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"/>
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.
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());
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.
Verbergen:
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);
Show:
edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
Für Kotlin:
val password = EditText(this)
password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
password.hint = "Password"