46 votes

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

Je voudrais créer un EditText qui n'accepte que des nombres, qui a un maximum de 4 nombres, et qui n'est jamais plus étroit qu'il ne le serait s'il était rempli de 4 nombres (il ne rétrécit pas lorsqu'il est vide, et ne doit pas s'étendre pour accueillir 4 nombres, il est donc fixe).

Les 2 premières sont réalisées avec : Android:inputType="number" et Android:maxLength="4".

Comment puis-je définir la longueur minimale ?

0 votes

Excepte (exclut) ou accepte (inclut) ?

103voto

kcoppock Points 57219

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

android:ems="4"

Cela donne à l'EditText une largeur de 4 ems exactement. La largeur d'un em correspond à la largeur du caractère le plus large (M) de la police sélectionnée.

6 votes

Cela fonctionne, mais comme je n'autorise que les entrées numériques, une largeur de 4 em est beaucoup plus large que nécessaire. Je peux jouer pour obtenir une meilleure largeur, mais c'est toujours un peu imprécis.

0 votes

Ça a parfaitement fonctionné pour moi. J'avais simplement besoin d'un champ de texte d'une longueur fixe pouvant contenir entre 1 et 5 chiffres, et qui aurait l'air bon quel que soit le nombre de chiffres saisis par l'utilisateur.

1 votes

C'est peut-être rare, mais je l'utilise fréquemment pour mes mises en page lorsque je dois obtenir des longueurs de champ égales. Si la police ou la taille de la police change, elle s'adapte, contrairement aux solutions qui définissent des longueurs invariables basées sur les pixels.

40voto

Jean Points 4881

Un peu pirate mais vous pouvez mettre votre EditText à l'intérieur d'un FrameLayout à côté d'un autre TextView con text="0000" y visibility=invisible.

FrameLayout Il aurait fallu width=wrap_content et votre EditText aura width=match_parent .
Cela devrait lui permettre d'avoir toujours la bonne largeur.

L'avantage de cette méthode est qu'elle est 100 % axée sur le xml, sans aucun code.

<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 votes

En fait, cela fonctionne mieux que la réponse de kcoppock, car il en résulte une vue de texte de l'exact côté droit. Mais, définitivement hackish.

0 votes

J'ai essayé de faire ce que Jean a dit, mais je n'ai pas pu pour une raison quelconque. J'ai fini par utiliser des indices.

2 votes

À l'ère moderne de la mise en page par contrainte, cette petite astuce peut en fait fonctionner très bien pour les textes d'édition numériques de largeur fixe. Il vous suffit de contraindre votre EditText au TextView invisible et vous n'avez pas besoin d'une mise en page imbriquée.

10voto

aesop systems Points 11

Vous pouvez également essayer d'utiliser . . .

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

. cela devrait assurer l'ajustement le plus serré possible autorisé par le style d'édition par défaut d'Android.

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

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

2voto

mike fratto Points 48

Utiliser 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 la base ems pour un champ de 2 caractères de large, mais comme ems nécessite un int, 2 était trop petit et 3 était trop grand. Beurk.

1voto

wea Points 76

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 ! !!

Profitez-en :)

0 votes

Ensuite, bien sûr, il faudrait voir manuellement ce que serait la largeur de quatre caractères, mais je continue à penser que c'est une façon très simple de définir manuellement la largeur et la hauteur d'un EditText !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X