2017-07-21 2 views
0

I ont deux EditText comme suit:Comment empêcher la modification d'un Edittext par la taille du texte entré?

<LinearLayout 
 
      android:layout_width="match_parent" 
 
      android:layout_height="wrap_content" 
 
      android:gravity="center" 
 
      android:weightSum="1" 
 
      android:orientation="horizontal"> 
 
      <EditText 
 
       android:id="@+id/edtTxtNameReg" 
 
       android:layout_width="wrap_content" 
 
       android:layout_height="wrap_content" 
 
       android:maxLines="1" 
 
       android:inputType="text" 
 
       android:layout_weight="0.5" 
 
       android:hint="Name"/> 
 
      <EditText 
 
       android:id="@+id/edtTxtSurNameReg" 
 
       android:layout_width="wrap_content" 
 
       android:layout_height="wrap_content" 
 
       android:maxLines="1" 
 
       android:inputType="text" 
 
       android:layout_weight="0.5" 
 
       android:hint="Surname"/> 
 
     </LinearLayout>

Au moment d'écrire dans edtTxtNameReg, sa largeur augmente et la largeur de edtTxtSurNameReg diminue.

Y at-il un moyen de garder la largeur de edtTxtNameReg constante et le texte défilant vers la gauche?

Merci

Répondre

2

Utilisez android:layout_width="0dp" pour les EditText et la largeur ne varie pas avec le contenu

Pour LinearLayout lorsque android:layout_weight est utilisé la largeur pour l'orientation horizontale ou la hauteur pour la verticale doivent être ="0dp"

0

La plupart de ce que Tonteria24 a dit est exact, mais pas cette partie:

Pour LinearLayout lorsque android:layout_weight est utilisé la largeur pour l'orientation horizontale ou la hauteur pour la verticale doit être ="0dp"

La façon layout_weight dans LinearLayout œuvres est:

  1. Chaque enfant reçoit autant d'espace qu'il demande
  2. l'espace supplémentaire est divisé en fonction du rapport de poids pour chaque enfant

Il est très commun de donner toutes les vues dans le LinearLayout une taille de 0dp et poids égaux, ou pour donner exactement une vue d'une taille de 0dp et le poids de 1. Cela a du sens car il saute essentiellement mon premier point ci-dessus (l'enfant demande 0 largeur ou hauteur) et divise ensuite l'espace uniformément.

Cependant, la combinaison wrap_content et layout_weight est parfaitement valide.

Mais, il provoquera un comportement différent. D'abord, le LinearLayout donnera au premier EditText suffisamment de largeur pour envelopper son contenu, puis il donnera (en essayant de) donner à la seconde EditText suffisamment de largeur pour envelopper son contenu, puis il divisera tout espace supplémentaire entre les deux vues.

Le résultat? À mesure que la largeur du premier contenu de EditText augmente, l'espace «supplémentaire» restant pour diviser se rétrécit. Le premier EditText finira par se développer pour remplir l'intégralité de LinearLayout si vous entrez suffisamment de texte.

C'est pourquoi la définition de sa largeur à 0dp le résout pour vous. Il arrête le comportement de croissance. Mais il peut y avoir une autre fois quand vous voulez utiliser wrap_content et layout_weight ensemble, et c'est parfaitement bien.

+0

Je n'ai pas dit que toutes les vues doivent avoir dimension = 0dp, seulement celles utilisant l'attribut layout_weight, parce que c'était l'erreur de mise en page originale, et pour moi utiliser wrap_content & layout_weight n'a aucun sens. –

+0

@ Tonteria24 Mais les vues utilisant 'layout_weight' ** n'ont pas besoin d'utiliser 0dp en général. –

+0

En utilisant wrap_content et layout_weight, vous définissez deux fois la même dimension, laquelle est la bonne? , pour moi ça n'a aucun sens ... –