Android: alignement vertical pour EditText sur plusieurs lignes (zone de texte)

232

Je veux avoir 5 lignes pour la hauteur de la zone de texte. J'utilise le code suivant.

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:singleLine="false"
    android:lines="5"
    android:layout_marginLeft="10dip"
    android:layout_marginRight="10dip" />

La zone de texte semble correcte, mais le problème est que le curseur clignote au milieu du champ de texte. Je veux qu'il clignote à la première ligne, au premier caractère du champ de texte.

d-man
la source
15
essayez de supprimer votre "centre" de gravité, pourrait être le problème
Sephy

Réponses:

370

Utilisation android:gravity="top"

CommonsWare
la source
99

Ceci est similaire à la réponse CommonsWare mais avec un mineur tweak: android:gravity="top|start". Exemple de code complet:

<EditText
    android:id="@+id/EditText02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:lines="5"
    android:gravity="top|start"
    android:inputType="textMultiLine"
    android:scrollHorizontally="false" 
/>
Nandagopal T
la source
8
N'utilisez pas top|leftsauf si vous savez que vous pouvez contrôler toutes les langues de votre application, il existe de nombreuses langues de droite à gauche ( en.wikipedia.org/wiki/Right-to-left ) Gardez-le convivial pour la localisation
MariusBudin
1
@MariusBudin Vraisemblablement, top|startserait la bonne alternative?
ban-geoengineering
19

Vous pouvez utiliser cet Edittext .... Cela vous aidera.

<EditText
android:id="@+id/EditText02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines="5"
android:gravity="top|left"
android:inputType="textMultiLine" />
Denny Sharma
la source
9

Utilisez ceci:

android:gravity="top"

ou

android:gravity="top|left"
Samir Mangroliya
la source
6
<EditText android:id="@+id/EditText02" android:layout_width="120dp"
    android:layout_height="wrap_content" android:lines="5" android:layout_centerInParent="true"
    android:gravity="top|left" android:inputType="textMultiLine"
    android:scrollHorizontally="false" android:minWidth="10.0dip"
    android:maxWidth="180dip" />

ça va marcher

Asad Rao
la source
3

Maintenant, une utilisation quotidienne de la gravité startest le meilleur choix:

android:gravity="start"

Pour EditText (zone de texte):

<EditText
    android:id="@+id/EditText02"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:lines="5"
    android:gravity="start"
    android:inputType="textMultiLine"
/>
Hasib Akter
la source
Pouvez-vous nous expliquer pourquoi cela fonctionne? Je me serais attendu startà avoir travaillé comme left(pour les langues occidentales), c'est-à-dire à n'affecter que la gravité horizontale, mais il semble aussi faire le travail de top.
ban-geoengineering
Oui, tu as raison. Nous l'utilisons principalement pour le support RTL. Comme en langue arabe, c'est aller à droite, au lieu de gauche. Et c'est aussi ce topque vous avez déjà demandé. En général, nous commençons à écrire à partir du côté supérieur gauche, c'est pourquoi cela présente STARTégalement les mêmes caractéristiques. @ ban-geoengineering
Hasib Akter
2

Je pense que vous pouvez utiliser à la layout:weight = 5place, android:lines = 5car lorsque vous portez votre application sur un appareil plus petit - elle le fait bien .. eh bien, les deux attributs accompliront votre travail ..

Sanjay Herle
la source