Comment puis-je empêcher un EditText de se redimensionner lorsque l'utilisateur tape?
-
05-07-2019 - |
Question
J'ai un EditText
et un bouton
placés l'un à côté de l'autre sur la même ligne horizontale. Cela a l'air génial, sauf lorsque l'utilisateur entre beaucoup de texte, le EditText
est redimensionné et le bouton
est écrasé.
Les EditText
et les boutons
sont réglés sur layout_width = "wrap_content &
". " fill_parent &
gâche la mise en page, et je ne veux pas utiliser de tailles absolues si je ne suis pas obligé - la façon dont elle est maintenant est superbe en paysage et en portrait, je ne ne voulez pas que le EditText
soit redimensionné.
Ma mise en page:
<TableLayout
android:id="@+id/homelayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow>
<TextView
android:id="@+id/labelartist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Find artists:" />
</TableRow>
<TableRow>
<EditText
android:id="@+id/entryartist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="6"
android:background="@android:drawable/editbox_background"
android:editable="true"
android:padding="5px"
android:singleLine="true" />
<Button
android:id="@+id/okartist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:layout_weight="1"
android:text="Search" />
</TableRow>
</TableLayout>
La solution
Pour utiliser EditText
android:layout_width="0dp" - not required but preferred.
android:layout_weight="1"
Et pour le bouton ne spécifiez pas android: poids du layout
Autres conseils
Ce que je fais est dans onCreate pour l'activité, mesurez d'abord le EditText puis appliquez sa maxWidth.
Vous pouvez le faire en utilisant un code semblable au suivant:
EditText someedittext = (EditText)findViewById(R.id.sometextview);
someedittext.setMaxWidth(someedittext.getWidth());
Donnez à EditText
un maxWidth
. Cela devrait empêcher le redimensionnement au-delà de la largeur fournie. De même, si vous souhaitez qu'il soit contenu sur une ligne, définissez également le paramètre maxLines
sur 1.
Il suffit d'utiliser:
android:layout_width="fill_parent"
pour EditText et Button. Cela fonctionnera également pour EditText, mais il est préférable de l’avoir sur les deux.
vous pouvez définir la taille de votre edittext comme indiqué ci-dessus
android:minWidth="80dp"
android:maxWidth="80dp"
ou
android:layout_width="60dp"
ou
vous pouvez appliquer une image d'arrière-plan de la taille souhaitée mais n'oubliez pas de définir sa hauteur et sa largeur avec wrap_content.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
J'ai eu un problème similaire, mais je n'ai pas réussi à faire en sorte que ce qui précède fonctionne. Ce que j’ai fait, c’est de saisir le texte de la boîte EditText, puis de le formater à la taille maximale que mon écran pouvait gérer. Lorsque je sauvegarde cette information dans la base de données, je l’enregistre en tant que texte d’affichage et texte original.
Si vous allez sur cette page , je mets une explication plus longue.
La bonne façon de procéder consiste à définir android: minWidth et android: maxWidth égaux à la largeur souhaitée. De cette façon, vous n’aurez pas à ajuster votre mise en page pour utiliser android: layout_weight.
Par exemple, si vous souhaitez que votre EditText ait toujours une densité de 80 pixels, quel que soit le nombre de caractères que vous tapez, utilisez les éléments suivants:
android:minWidth="80dp"
android:maxWidth="80dp"
J'ai eu la requête exacte. Mais j'avais un EditText et un bouton côte à côte dans une mise en page linéaire. J'ai essayé android: layout_weight = & 1; " 1 " pour EditText android: layout_width = " 0dp " Et cela a fonctionné tout simplement parfait !! Merci beaucoup!
La solution choisie fonctionne, mais permettez-moi d'ajouter un petit complément:
si tu utilises
android: layout_weight = " 0.15 "
(la valeur n'a pas d'importance)
alors
android: layout_width = "0dp"
si LinearLayout
est horizontal
ou
android: layout_height = "0dp"
si LinearLayout
est vertical.