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?

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"


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.


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 :)


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


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


11

Si quelqu'un a encore besoin

android:gravity="end"

à 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"


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"

5

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


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"


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).


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.


2

Vous pouvez utiliser:

    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"


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é

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"


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.



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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.