2010-11-23 13 views
39

Ich möchte einen EditText erstellen, der nur Zahlen akzeptiert, maximal 4 Zahlen hat und niemals schmaler ist, als wenn er mit 4 Zahlen gefüllt wäre (er schrumpft nicht, wenn er leer ist, oder er muss expandieren, um 4 Zahlen aufzunehmen, so ist es behoben.)Wie erstellt man in Android EditText mit fester Breite?

Die ersten 2 sind mit: Android: inputType = "Nummer" und Android: MaxLength = "4".

Wie kann ich die Mindestlänge einstellen?

+0

ausschließt (ausschließt) oder akzeptiert (enthält)? –

Antwort

34

Ein wenig hackish, aber Sie können andere Ihre EditText innerhalb eines FrameLayout neben setzen mit TextView mit text="0000" und visibility=invisible.

FrameLayoutwidth=wrap_content haben sollten und Ihre EditTextwidth=match_parent haben.
Das sollte es immer die richtige Breite machen.

Der Vorteil davon ist, es ist 100% XML-Seite, kein Code beteiligt.

<FrameLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="0000" 
    android:visibility="invisible" /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:maxLength="4" /> 
</FrameLayout> 
+0

Das funktioniert tatsächlich besser als die Antwort von kcoppock, weil es zu einer Textansicht der rechten Seite führt. Aber definitiv hackisch. – ab11

+0

Ich versuchte zu tun, was Jean sagte, aber ich konnte aus irgendeinem Grund nicht. Ich habe am Ende Hinweise benutzt. – Quv

0

Ich weiß nichts über integrierte Lösung, aber Sie können versuchen, die Länge passiv zu prüfen und einen Dialog mit Fehlermeldung zum Zeitpunkt der Einreichung zu erstellen.

0

Das Problem ist, dass ein EditText-Widget kann Verlust Fokus wegen einer Vielzahl von Aktionen wie Berühren einer anderen empfindlichen Ansicht, Menü-Taste oder (harte Tastatur-Cursor-Steuerelement) und so weiter. Die Begrenzung einer maximalen Länge oder Art der Eingabe kann während des Bindevorgangs erfolgen (Akzeptieren Sie das Zeichen, wenn es den Filter passiert oder die Länge nicht überschritten wird). aber verlorener Fokus kann jedes Mal auftreten - selbst die Einreichung ist noch nicht abgeschlossen und die Eingabe ist kurz -> daher gibt es keine eingebaute Minimallängenlösung, weil die Anwendung an diesem Punkt die Ausführung eines anderen Ereignisses oder einer anderen Aufgabe blockiert. Zumindest müssen Sie Ihre Eingabe validieren, bevor Sie mit dem nächsten Schritt in Ihrem Workflow fortfahren.

93

Eine selten verwendete (AFAIK) Attribut eines EditText, die Sie verwenden können, ist:

android:ems="4"

Das die EditText genau 4 ems breit macht. Eine Breite ist die Breite des breitesten Zeichens (M) in der ausgewählten Schriftart.

+3

Das funktioniert, aber weil ich nur Zahleneingabe erlaube, sind 4 Em-Breiten viel breiter als benötigt. Ich kann herumspielen, um eine bessere Breite zu bekommen, aber es ist immer noch ein bisschen ungenau. – ab11

+0

Arbeitete perfekt für mich. Ich brauchte nur ein Textfeld fester Länge, das irgendwo zwischen 1 und 5 Ziffern enthalten konnte und gut aussah, unabhängig davon, wie viele Ziffern der Benutzer eingegeben hatte. – ArtOfWarfare

+1

Vielleicht ist es selten, aber ich verwende es häufig für meine Layouts, wenn ich gleiche Feldlängen erreichen muss. Wenn sich die Schriftart oder die Schriftgröße ändert, passt sie sich an, im Gegensatz zu Lösungen, die auf Pixel basierende unveränderliche Längen festlegen. –

2

Verwendung android: width = „XXX.Xdp“

Auf diese Weise können Sie die Breite in der Dichte Pixel eingestellt, die in Bezug auf die Rasterdichte sein sollte. Ich habe versucht ems für ein Feld 2 Zeichen breit zu verwenden, aber da ems erfordert einen int, 2 war zu klein und 3 war zu groß. Blech.

0

Ich benutze Android: layout_width = "60dip" so stimme mit Mike Fratto.

Die ems-Lösung scheint ebenfalls interessant zu sein.

Phil

8

Sie können auch versuchen mit. . .

android:ems="4" 
android:maxEms="4" 
android:layout_width="wrap_content" 

. . .Dies sollte die engste Passung möglicherweise erlaubt durch den Standard-Android-EditText Stil

Für zusätzliche Kontrolle mit der Polsterung auf beide links versichern und rechts können Sie

android:background="#ffffff" 
android:paddingLeft="0dp" 
android:paddingRight="0dp" 
1

Es ist eine unglaublich einfache Möglichkeit, dies programmatisch zu tun verwenden.

myEditText.setLayoutParams(new LinearLayout.LayoutParams(200, 50)); 

Dies würde die Breite auf 200 und die Höhe auf 50 setzen!

Enjoy :)

+0

Dann müssten Sie natürlich manuell sehen, wie groß die Breite von vier Zeichen wäre, aber ich denke immer noch, dass dies eine sehr einfache Methode ist, die Breite und Höhe eines EditText manuell festzulegen! – wea

0

Sie Ausrichtung weise andere einstellen, wenn Sie Zeichen setzen mehr als wditText Breite als es ist Erhöhung Breite oder EditText Breite. Bitte setzen Sie aufLeftOf und ToRightOf der obigen Ansicht, um diese Dinge zu verwalten. Nur eine Lösung

18

In meiner Situation brauchte ich die Ansicht, um 6 Ziffern breit zu sein. android: ems hat das Feld zu breit gemacht (da das M-Zeichen breiter ist als eine Ziffer).

Ich endete mit einem transparenten Hinweis, der die minimale Breite des Feldes vorgibt. Das folgende Beispiel ist sechsstellig breit.

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="000000" 
     android:textColorHint="#00FFFFFF" 
     android:maxLength="6" 
     android:inputType="numberPassword" /> 

Diese Lösung ist unabhängig von Schriftart, Buchstabenabstand und anderen Dingen, die variieren können. Die textColorHint ist eine 0% deckende weiße Farbe, daher sollte der Hinweis für den Benutzer nie sichtbar sein.

+0

Guter Trick :) Danke für die Idee. –

+0

Dies ist die einfachste Lösung, die am besten funktioniert. kcoppocks Lösung hat bei mir nicht funktioniert. –

Verwandte Themen