web-dev-qa-db-fra.com

Sous Android, comment créer EditText de largeur fixe?

Je voudrais créer un EditText qui accepte uniquement des nombres, a un maximum de 4 chiffres et n’est jamais plus étroit qu’il serait si rempli avec 4 chiffres fixé.)

Les 2 premiers sont réalisés avec: Android: inputType = "number" et Android: maxLength = "4". 

Comment puis-je définir la longueur minimale?

39
ab11

Un peu hackish , mais vous pouvez mettre votre EditText dans une FrameLayout avec une autre TextView avec text="0000" et visibility=invisible.

FrameLayout Doit avoir width=wrap_content et votre EditText aura width=match_parent.
Cela devrait toujours faire la bonne largeur.

L'avantage de ceci est qu'il est 100% xml-side, sans code impliqué.

<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>
35
Jean

Un attribut rarement utilisé (AFAIK) d'un EditText que vous pouvez utiliser est:

Android:ems="4"

Cela rend le EditText exactement 4 ems large. Une largeur em est la largeur du caractère le plus large (M) de la police sélectionnée. 

94
kcoppock

Dans ma situation, j'avais besoin que la vue soit large de 6 chiffres. Android: ems a créé un champ trop large (le caractère M étant plus large qu'un chiffre).

J'ai fini par utiliser un indice transparent qui dicte la largeur minimale du champ. L'exemple ci-dessous est large de six chiffres.

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

Cette solution est indépendante de la police, de l’espacement des lettres et de tout autre facteur pouvant varier. TextColorHint est une couleur blanche opaque à 0%; par conséquent, le conseil ne doit jamais être visible pour l'utilisateur.

18
MW.

Vous pouvez également essayer d'utiliser. . .

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

. . . cela devrait assurer l'ajustement le plus étroit éventuellement permis par le style edittext Android par défaut

Pour un contrôle supplémentaire avec le rembourrage à gauche et à droite, vous pouvez utiliser

Android:background="#ffffff"
Android:paddingLeft="0dp"
Android:paddingRight="0dp"
8
Chris Sullivan

Utilisez Android: width = "XXX.Xdp"

Cela vous permet de définir la largeur en pixels de densité qui doit être relative à la densité de l'écran. J'ai essayé d'utiliser des ems basés sur un champ de 2 caractères, mais comme ems nécessite un int, 2 était trop petit et 3 trop grand. Blech.

2
mike fratto

Il existe un moyen incroyablement facile de le faire par programme.

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

Cela réglerait la largeur à 200 et la hauteur à 50 !!

Prendre plaisir :)

1
wea

Vous pouvez définir l'alignement autrement lorsque vous mettez un caractère supérieur à la largeur de wditText à la largeur d'augmentation ou à la largeur d'EditText . Définissez les options toGeftOf et toRightOf de la vue ci-dessus pour gérer ces éléments. Une seule solution

0
Ramkailash

Vous ne connaissez pas la solution intégrée, mais vous pouvez essayer de vérifier passivement la longueur et d'afficher un dialogue avec message d'erreur au moment de la soumission. 

0
Vladimir Ivanov

Le problème est qu'un widget EditText peut perdre le focus en raison de nombreuses actions différentes, telles que le fait de toucher une autre vue sensible, un bouton de menu ou (contrôle du curseur au clavier), etc. La restiction d'une longueur maximale ou du type de l'entrée peut être effectuée pendant le processus de rattachement (acceptez le caractère s'il passe le filtre ou si la longueur n'est pas dépassée). mais la focalisation perdue peut être occasionnelle à chaque fois - même la soumission n'est pas encore terminée et l'entrée est abrégée -> il n'y a donc pas de solution de longueur minimale intégrée, car l'application bloquerait à ce stade l'exécution d'un autre événement ou d'une autre tâche. Au moins, vous devez valider votre saisie avant de passer à la prochaine étape de votre flux de travail.

0
Impression

J'utilise Android: layout_width = "60dip", donc d'accord avec Mike Fratto.

La solution ems semble également intéressante.

Phil

0
Phil