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.
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.
Antworten:
Gemäß den TextView-Dokumenten ist die programmatische Version von android: password setTransformationMethod () , nicht setInputType (). Also so etwas wie:
mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
sollte den Trick machen.
EditText
(ersetzt Zeichen durch Passwortpunkte). Dies hat keinerlei Auswirkung auf das, was in sich selbst eingegeben werden darf EditText
.
Um den Eingabetyp für einen EditText programmgesteuert festzulegen, müssen Sie angeben, dass der Eingabeklassentyp Text ist.
editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Hier sind die verschiedenen Eingabetypen aufgeführt, die auf der Standardtastatur angezeigt werden.
editText.setInputType(InputType.TYPE_CLASS_TEXT);
Weitere Optionen TYPE_CLASS_TEXT
finden Sie in der Dokumentation .
<EditText
android:inputType="text"
/>
Weitere Optionen 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_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;
}
}
}
Ich habe alle mit gelöst
.setInputType(InputType.TYPE_CLASS_NUMBER);
siehe 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)
Dies kann für andere wie mich hilfreich sein, die zwischen Passwort und Freitextmodus wechseln wollten. Ich habe versucht, die vorgeschlagenen Eingabemethoden zu verwenden, aber es hat nur in eine Richtung funktioniert. Ich konnte vom Passwort zum Text wechseln, aber dann konnte ich nicht zurückkehren. Für diejenigen, die versuchen, mit einem Umschalter umzugehen (z. B. ein Kontrollkästchen Kennwort anzeigen), verwenden Sie
@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!
Versuchen Sie, dies dem EditText / TextView-Tag in Ihrem Layout hinzuzufügen
android:password="true"
Bearbeiten: Ich habe gerade Ihren Beitrag noch einmal gelesen, vielleicht müssen Sie dies nach dem Bau tun. Ich verstehe nicht, warum Ihr Snippet nicht funktionieren würde.
Ich weiß, dass die erwartete Antwort in ist Java
. Aber hier sind meine 2 Cent Ratschläge, die immer versuchen, mit der Ansicht zusammenhängende XML
Dinge in (zumindest grundlegende Sachen) zu behandeln, daher würde ich vorschlagen, lieber ein xml
Attribut zu verwenden, als diesen Anwendungsfall in zu behandelnjava
<EditText
android:inputType="textPassword"/>
Ausblenden:
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);
Show:
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 sich der Cursor nach dem Aufrufen dieser Funktion zum Startpunkt des editText bewegt. Stellen Sie daher sicher, dass Sie den Cursor erneut zum Endpunkt bewegen.
field.setInputType(InputType.TYPE_CLASS_TEXT);