Aligner à droite le texte dans Android TextView

215

J'ai un TextViewdans ma demande. Je veux aligner le texte à droite. J'ai essayé d'ajouter:

android:gravity="right"

Mais ça ne marche pas pour moi.

Que pourrais-je faire de mal?

Bishan
la source

Réponses:

193

Je pense que vous faites ceci: android:layout_width = "wrap_content"
Si c'est le cas, faites ceci:android:layout_width = "match_parent"

un joueur juste
la source
2
@Bishan fill remplira le reste de l'espace, match le fixera égal à la largeur du parent
Troy Cosentino
11
En fait, fill_parent et match_parent sont la même chose. Le nom a été changé pour match_parent car apparemment fill_parent déroutait les gens.
Edward Falk
158

En général, android:gravity="right"est différent de android:layout_gravity="right".

Le premier affecte la position du texte lui-même dans la vue, donc si vous voulez qu'il soit aligné à droite, alors layout_width=devrait être soit "fill_parent"ou "match_parent".

La seconde affecte la position de la vue à l'intérieur de son parent, en d'autres termes - l'alignement de l'objet lui-même (zone d'édition ou vue texte) à l'intérieur de la vue parent.

wiztrail
la source
83

La meilleure solution est celle qui est la plus simple et celle qui modifie le moins le comportement de votre code .

Et si vous ne pouvez résoudre ce problème qu'avec 2 propriétés sur votre TextView?

Au lieu de devoir modifier vos LinearLayoutpropriétés, cela peut peut-être modifier le comportement des LinearLayoutenfants?

De cette façon, vous n'avez pas besoin de changer LinearLayout propriétés et le comportement, il vous suffit d'ajouter les deux propriétés suivantes à votre cible TextView:

android:gravity="right"
android:textAlignment="gravity"

Quoi de mieux que de changer uniquement votre cible pour résoudre votre solution au lieu d'avoir une chance de provoquer un autre problème à l'avenir, en modifiant votre père cible? Pensez-y :)

Paulo Roberto Rosa
la source
Je reçois une erreur indiquant qu'aucun identifiant de ressource n'a été trouvé pour la ressource 'textAlignment' dans le package android.
anu
Vous êtes sûr d'avoir accès à une TextViewpropriété? - Vous pouvez vérifier la propriété de la référence ici: developer.android.com/reference/android/view/…
Paulo Roberto Rosa
4
textAlignment a été ajouté dans l'API niveau 17 (Android 4.2). Votre émulateur / appareil devra exécuter 4.2+ pour que cela fonctionne.
thanhtd
J'ai essayé d'utiliser cette propriété textAlignment dans Android 4.1.2 et j'ai obtenu l'erreur "Aucun identifiant de ressource trouvé pour l'attribut 'textAlignment'". J'ai trouvé la réponse à cette erreur ici stackoverflow.com/a/20176191/723507 . Comment pourriez-vous l'utiliser dans 4.0.3?
thanhtd
20

android:layout_gravityest utilisé pour aligner la vue texte par rapport à la disposition parent. android:gravityest utilisé pour aligner le texte à l'intérieur de la vue texte.

Êtes-vous sûr que vous essayez d'aligner le texte à l'intérieur de la vue de texte vers la droite ou voulez-vous déplacer la vue de texte elle-même vers la droite par rapport à la disposition parent ou essayez-vous de réaliser les deux

rogerstone
la source
j'essaie d'aligner le texte à l'intérieur de la vue texte à droite
Bishan
11

L'extrait de code suivant:

android:textAlignment="textEnd"
android:layout_gravity="end"

fonctionne très bien pour moi

Fey Agape
la source
11

Si quelqu'un a encore besoin

android:gravity="end"
npk
la source
à quoi ça sert?
gumuruh
Dans LTR, cela aligne le texte à droite et dans RTL, à gauche
npk
8

Assurez-vous que vous n'utilisez pas android:layout_width="wrap_content"si c'est le cas, il ne sera pas en mesure de définir la gravité car vous n'avez pas assez d'espace pour aligner le texte. Utilisez plutôtandroid:layout_width="fill_parent"

Lalit Poptani
la source
7
android:gravity="right"

Il est essentiellement utilisé dans la disposition linéaire, vous devez donc définir la largeur de TextView ou EditText comme

android:layout_width = "match_parent"

et

Lorsque vous travaillez dans la mise en page relative, utilisez

android:layout_alignParentRight="true"
Kushal Ramola
la source
5

Faire le (LinearLayout) android:layout_width="match_parent"et le TextViewandroid:layout_gravity="right"

Auguste François
la source
5

Si c'est le cas, RelativeLayoutvous pouvez utiliserandroid:layout_toRightOf="@id/<id_of_desired_item>"

Ou

Si vous souhaitez aligner sur le rightcoin de l'appareil, l'endroitandroid:layout_alignParentRight="true"

user2342517
la source
4

Permettez-moi d'expliquer le concept de gravité en utilisant WEB car beaucoup de développeurs en sont conscients.

android_layout_gravity se comporte float:left|right|top|bottom

Alors que android_gravitytravailler commetext_align:centre|left|right

Dans Android float est android_layout_gravity et text_align: est android_gravity.

Et android_layout_gravity s'applique par rapport au parent. où as android_gravity s'applique à son contenu enfant ou intérieur.

Remarque android_gravity ne fonctionne que lorsque sa vue est match_parent (lorsqu'il a de l'espace pour centrer).

Zar E Ahmer
la source
3

Ci-dessous fonctionne pour moi:

<TextView
    android:id="@+id/tv_username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sarah" />

<TextView
    android:id="@+id/tv_distance"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/tv_username"
    android:layout_alignParentEnd="true"
    android:layout_toEndOf="@+id/tv_username"
    android:text="San Marco"
    android:textAlignment="viewEnd" />

Veuillez noter les paramètres android:layout_alignParentEndet les android:textAlignmentparamètres du deuxième TextView.

David Cheung
la source
2

Vous pouvez utiliser:

    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
Pablo
la source
2

cela devrait servir le but

android:textAlignment="textStart"

masoud Cheragee
la source
2

Dans mon cas, j'utilisais Relative Layoutpour unemptyString

Après avoir lutté là-dessus pendant une heure. Seulement cela a fonctionné pour moi:

android:layout_toRightOf="@id/welcome"
android:layout_toEndOf="@id/welcome"
android:layout_alignBaseline="@id/welcome"

layout_toRightOfou les layout_toEndOfdeux fonctionne, mais pour mieux le supporter, j'ai utilisé les deux.

Pour être plus clair:

C'est ce que j'essayais de faire:

entrez la description de l'image ici

Et c'était la sortie de l'émulateur

entrez la description de l'image ici

Disposition:

<TextView
    android:id="@+id/welcome"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Welcome "
    android:textSize="16sp" />
<TextView
    android:id="@+id/username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@id/welcome"
    android:layout_toRightOf="@id/welcome"
    android:text="@string/emptyString"
    android:textSize="16sp" />

Remarquerez que:

  1. android:layout_width="wrap_content" travaux
  2. Gravity N'est pas utilisé
Rohit Sharma
la source
1

J'ai également rencontré le même problème et j'ai pensé que le problème se produisait car la disposition_largeur du TextView avait wrap_content. Vous devez avoir layout_width comme match_parent et l'androïde: gravity = "gravity"

Arup Saha
la source
1
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">

  <TextView
    android:id="@+id/tct_postpone_hour"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_gravity="center"
    android:gravity="center_vertical|center_horizontal"
    android:text="1"
    android:textSize="24dp" />
</RelativeLayout>

fait aligner le numéro un au centre à la fois horizontal et vertical.

Alp Altunel
la source
0

essayez d'ajouter android:gravity="center"dansTextView

TheGreenGoblen
la source
0

J'ai utilisé l'attribut "layout_alignRight" dans mon cas, dans le texte c'est:

android:layout_alignRight="@+id/myComponentId"

Si vous voulez ajouter une marge droite, il suffit de définir l'attribut "Layout_Margin Right" sur "20dp" par exemple, dans le texte c'est:

android:layout_marginRight="20dp"
Laurent
la source