Wenn sich ein EditText im Kennwortmodus befindet, wird der Hinweis anscheinend in einer anderen Schriftart angezeigt (Courrier?). Wie kann ich das vermeiden? Ich möchte, dass der Hinweis in derselben Schriftart angezeigt wird, in der sich der EditText nicht im Kennwortmodus befindet.
Meine aktuelle XML:
<EditText
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:singleLine="true" />
android
fonts
passwords
android-edittext
hpique
quelle
quelle
Antworten:
Das Ändern der Schrift in XML funktionierte auch für mich nicht im Hinweistext. Ich habe zwei verschiedene Lösungen gefunden, von denen die zweite für mich besser ist:
1) Entfernen Sie
android:inputType="textPassword"
aus Ihrer XML-Datei und setzen Sie sie stattdessen in Java:Bei diesem Ansatz sieht die Hinweisschrift gut aus, aber während Sie in dieses Bearbeitungsfeld eingeben, sehen Sie nicht jedes Zeichen im Klartext, bevor es zu einem Kennwortpunkt wird. Auch bei der Eingabe im Vollbildmodus werden nicht die Punkte angezeigt, sondern das Kennwort im Klartext.
2) Lassen Sie
android:inputType="textPassword"
in Ihrer XML. Legen Sie in Java AUCH die Schriftart und die Kennwortmethode fest:Dieser Ansatz gab mir die gewünschte Hinweisschrift UND gab mir das gewünschte Verhalten mit den Passwortpunkten.
Hoffentlich hilft das!
quelle
password.setTransformationMethod(new PasswordTransformationMethod());
nötig? Scheint für mich ohne gut zu funktionieren.setTransformationMethod()
. Es gibt jedoch einige Nebenwirkungen dieses Ansatzes, die ihn unerwünscht machen, da er im Vergleich zum Standardverhalten zu einem nicht standardmäßigentextPassword
Verhalten führt. Eine vollständigere Lösung finden Sie in der Hilfsklasse unterinputType="textPassword"
Ich habe diesen nützlichen Tipp im Dialogs Guide gefunden
Beispielsweise
quelle
Dies ist, was ich getan habe, um dieses Problem zu beheben. Aus irgendeinem Grund musste ich die Transformationsmethode nicht festlegen, damit dies eine bessere Lösung ist:
In meiner XML:
In meinem
Activity
:quelle
Der setTransformationMethod-Ansatz unterbricht android: imeOption für mich und ermöglicht die Eingabe von Wagenrückläufen in das Kennwortfeld. Stattdessen mache ich das:
Und setze nicht android: password = "true" in XML.
quelle
Die von manisha bereitgestellte Antwort funktioniert zwar, lässt das Kennwortfeld jedoch im Vergleich zum Standard in einem nicht standardmäßigen Zustand. Das heißt, die Standardschriftart gilt dann auch für das Kennwortfeld, einschließlich der Punktersetzungen und der Vorschauzeichen, die angezeigt werden, bevor sie durch die Punkte ersetzt werden (sowie wenn es sich um ein "sichtbares Kennwort" -Feld handelt).
Um dies zu beheben und es 1) genau wie den Standardeingabetyp aussehen und verhalten zu lassen
textPassword
, aber auch 2) den Hinweistext in einer Standardschriftart (nicht Monospace) erscheinen zu lassen, muss einTextWatcher
Feld vorhanden sein, mit dem das umgeschaltet werden kann Schriftart richtig hin und her zwischenTypeface.DEFAULT
undTypeface.MONOSPACE
basierend darauf, ob es leer ist oder nicht. Ich habe eine Hilfsklasse erstellt, mit der dies erreicht werden kann:Um es dann zu nutzen, müssen Sie nur die
register(View)
statische Methode aufrufen . Alles andere erfolgt automatisch (einschließlich des Überspringens der Problemumgehung, wenn die Ansicht dies nicht erfordert!):quelle
EditText
(z. B. den Hinweistext Roboto Light erstellen),Typeface.DEFAULT
wird diese durch eine spätere Einstellung überschrieben. Ich rufefield.getTypeface()
von vorne an und verwende diese Schrift, wenn ich später auf die "Standard" -Schrift zurücksetzen muss.field.getTypeface()
scheint nicht 100% zuverlässig zu sein (so oft erhalten Sie nur die Monospace-Schrift zurück), aber das Erstellen einer Schriftart überTypeface.create()
und das anschließende Einstellen, das gut zu funktionieren scheint.Es gibt viele Möglichkeiten, dieses Problem zu lösen, aber jede hat Vor- und Nachteile. Hier ist meine Prüfung
Ich nur Gesicht diesem Schriftart Problems in einem Gerät (Liste am Ende meiner Antwort) , wenn der Eingang Passwort aktivieren , indem Sie
Wenn ich benutze
android:inputType="textPassword"
, ist dieses Problem nicht aufgetretenEtwas, das ich versucht habe
1) Verwenden Sie
setTransformationMethod
stattdesseninputType
2) Verwenden
Typeface.DEFAULT
sans-serif-light
ist eine Standardschriftart für alleView
in meiner Anwendung => danach siehtsetTypeface(Typeface.DEFAULT)
dieEditText
Schriftart auf einigen Geräten immer noch anders aus3) Verwenden
android:fontFamily="sans-serif"
MEINE LÖSUNG
Testen
Einige Probleme mit der Schriftart des Geräts
Einige Geräte haben keine Probleme mit der Schriftart
quelle
setTransformationMethod
Methode verwendet (wo kein Problem aufgetreten ist).setTransformationMethod
funktioniert es, aber die Tastatur wird nicht gut angezeigt. Wenn Sie jedoch damit okken, ist es immer noch ok, weil es nur ein kleines Problem istDie anderen Antworten sind in den meisten Fällen die richtige Lösung.
Wenn Sie jedoch eine benutzerdefinierte
EditText
Unterklasse verwenden, um beispielsweise standardmäßig eine benutzerdefinierte Schriftart anzuwenden, liegt ein subtiles Problem vor. Wenn Sie die benutzerdefinierte Schriftart im Konstruktor Ihrer Unterklasse festlegen, wird sie vom System weiterhin überschrieben, wenn Sie sie festlegeninputType="textPassword"
.In diesem Fall verschieben Sie Ihr Styling
onAttachedToWindow
nach Ihremsuper.onAttachedToWindow
Anruf auf.Beispielimplementierung:
quelle
Ich weiß , das die ältere sein kann , aber ich habe in etwas zu diesem Problem bucklige , wenn ich verwenden
InputType
undapp:passwordToggleEnabled="true"
zusammen.Schreiben Sie dies, da es jemandem hier helfen kann.
Ich möchte ein benutzerdefiniertes Feld
app:passwordToggleEnabled
für die Schriftart zum Kennwort zusammen mit der Option für mein Kennworteingabefeld verwenden. In der Unterstützungsbibliothek 27.1.1 (während des Schreibens) stürzte sie jedoch ab.Der Code war also wie folgt:
Der obige Code wurde nicht
inputType
in XML definiertUnd in Java
setTransformationMethod
wird mir helfen, die Eigenschaften destextPassword
Eingabetyps zu erlangen, und ich bin auch glücklich über meinen benutzerdefinierten Schriftstil.Der unten erwähnte Absturz ereignete sich jedoch in allen API-Ebenen mit der 27.1.1-Unterstützungsbibliothek.
Dies stürzte aufgrund der
onRestoreInstanceState
innerenTextInputLayout
Klasse ab.Schritte zum Reproduzieren: Schalten Sie die Kennwortsichtbarkeit um, minimieren Sie die App und öffnen Sie sie über die letzten Apps. Äh, ho abgestürzt!
Alles, was ich brauchte, war die Standardoption zum Umschalten des Passworts (mithilfe der Support-Bibliothek) und die benutzerdefinierte Schriftart im Passwort-Eingabefeld.
Nach einiger Zeit, wie unten herausgefunden,
In XML hinzugefügt
android:inputType="textPassword"
Im obigen Java-Code
Ich habe die benutzerdefinierte Schriftart vom Benutzernamen erhalten
EditText
und aufTextInputLayout
das Kennwortfeld angewendet . Jetzt müssen Sie die Schriftart nicht explizit auf das Kennwort festlegen,EditText
da sie dieTextInputLayout
Eigenschaft erhält .Auch habe ich entfernt
password.setTransformationMethod(new PasswordTransformationMethod());
Auf diese Weise
passwordToggleEnabled
funktioniert, wird auch die benutzerdefinierte Schriftart angewendet und tschüss auf den Absturz. Ich hoffe, dieses Problem wird in den kommenden Support-Versionen behoben.quelle
Sie können auch ein benutzerdefiniertes Widget verwenden. Es ist sehr einfach und überfrachtet Ihren Aktivitäts- / Fragmentcode nicht.
Hier ist der Code:
Und Ihr XML sieht folgendermaßen aus:
quelle
TextView
scheint intern die benutzerdefinierte Schriftart nach dem Konstruktoraufruf zu überschreiben. Eine Problemumgehung in einer anderen Antwort bereitgestellt.Verwenden Sie die Kalligraphiebibliothek .
Dann werden die Kennwortfelder immer noch nicht mit der richtigen Schriftart aktualisiert. Tun Sie dies im Code, nicht in XML:
quelle
Ich habe kürzlich die Möglichkeit hinzugefügt, das Ein- und Ausschalten von Monospace in eine Erweiterung von EditText zu ändern, die speziell für Kennwörter vorgesehen ist, die einigen Benutzern möglicherweise helfen. Es wird nicht verwendet
android:fontFamily
, ist also kompatibel <16.quelle
Sie können auch die verwenden
zusammen mit
quelle
Ich verwende diese Lösung, um die Schrift abhängig von der Sichtbarkeit der Hinweise umzuschalten. Es ähnelt Joes Antwort, erweitert jedoch stattdessen EditText:
quelle
Wenn Sie die Kalligraphiebibliothek in Kombination mit einem TextInputLayout und einem EditText verwenden, funktioniert der folgende Code gut.
quelle
Ein seltsamer Fall vielleicht, aber ich habe damit experimentiert und herausgefunden, dass:
hat die Größe der Schriftart des Hinweises anstelle der Schriftart selbst geändert ! Dies ist immer noch ein unerwünschter Effekt. Seltsamerweise ist die umgekehrte Operation:
Behält die gleiche Schriftgröße bei.
quelle
Ich habe eine sichere Lösung für dieses Problem gefunden
Der beste Weg zu Hallo, ich habe eine sichere Lösung für dieses Problem gefunden
Der beste Weg ist, einen benutzerdefinierten editText zu erstellen und den Wert der Schriftart als temporär zu speichern und dann die Methode auf die InputType-Änderungen anzuwenden. Schließlich setzen wir den Wert der temporären Schriftart auf den editText zurück. wie so:
quelle
So erstellen Sie ein Eingabekennwort mit einem Hinweis, der nicht in * konvertiert wurde, und eine Standardschrift !!.
Auf XML:
Über Aktivität:
danke an: mango und rjrjr für den einblick: d.
quelle
wie oben, aber stellen Sie sicher, dass die Felder nicht den fett gedruckten Stil in XML haben, da sie selbst mit dem obigen Fix niemals gleich aussehen werden!
quelle