Comment configurer Android: gravité sur TextView du côté Java dans Android


219

Je peux utiliser android:gravity="bottom|center_horizontal"en xml sur une visualisation de texte pour obtenir les résultats souhaités, mais je dois le faire par programme. Ma vue textuelle est à l'intérieur d'un tablerowsi cela compte dans un relativelayout.

J'ai essayé:

LayoutParams layoutParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
labelTV.setLayoutParams(layoutParams);

Mais si je comprends bien, cela s'appliquerait à la tablerow, pas à la vue de texte?

Réponses:


523
labelTV.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Version Kotlin (merci à Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Parlez- vous également de gravité ou de layout_gravity? Ce dernier ne fonctionnera pas dans un RelativeLayout .


Merci qui a fonctionné. Je me sens un peu idiot maintenant d'avoir raté ça. À l'origine, le problème était de définir les marges sur un champ de texte. Je suppose que j'ai supposé parce que je ne pouvais pas trouver une méthode setMargin () que setGravity n'existerait pas non plus.
Nate

7
Merci +1, j'ai trouvé la documentation, mais comme d'habitude, elle ne va qu'à mi-chemin, n'indiquant pas clairement d'où je tire les constantes de gravité (Gravity.CENTER, etc.).
Hein du Plessis

1
Pour tous ceux qui viennent ici de Google, comme moi, la façon Kotlin est:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

Pour moi, la façon kotlin est source de confusion, pourquoi est-ce oret non and?! ??!
ZooMagic

38

Cela centrera le texte dans une vue texte:

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);

5
Ça n'a pas marché. "lp.gravity ne peut pas être résolu ou n'est pas un champ"
Nate

C'est étrange parce que ce code fonctionne et se compile très bien pour moi. Comment définiriez-vous le poids d'une vue de texte car leur méthode n'est pas setWeight ()?
radiofréquence

4
J'ai trouvé le problème. Nate importe android.view.ViewGroup. Cette classe a différents types de méthodes et ne compile pas. Vous devez plutôt importer android.view.WindowManager.
Finnboy11

Devrait mieux importer android.widget.LinearLayout.LayoutParams lorsque la vue texte est à l'intérieur de la disposition linéaire. Othervise vous ClassCastException
Tomm

Merci, ça marche. Mais ce n'est pas une solution complète car un type de LayoutParamsn'est pas défini ici et peut varier, donc il ne se compilera pas. Vous devez connaître une disposition parent (par exemple, LinearLayout) et l'écrire ici.
CoolMind

7

Nous pouvons définir la gravité de la mise en page sur n'importe quelle vue comme ci-dessous

myView = findViewById(R.id.myView);
myView.setGravity(Gravity.CENTER_VERTICAL|Gravity.RIGHT);
 or
myView.setGravity(Gravity.BOTTOM);

Cela équivaut au code xml ci-dessous

<...
 android:gravity="center_vertical|right"
 ...
 .../>

La gravité de la mise en page n'est pas la même que la gravité
Zvonimir Peran

3

Vous devez utiliser textView.setGravity(Gravity.CENTER_HORIZONTAL);.

N'oubliez pas qu'en utilisant

LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layoutParams2.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

ne fonctionnera pas. Cela définira la gravité du widget et non de son texte.


2

Utilisez ce code

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");

2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Cela définira la gravité de votre affichage de texte.


0

Résolu cela en faisant quelques choses, en obtenant d'abord le heightde mon TextViewet en le plongeant par le texte sizepour obtenir le nombre total de lignes possible avec le TextView.

int maxLines = (int) TextView.getHeight() / (int) TextView.getTextSize();

Après avoir obtenu cette valeur, vous devez définir votre TextView maxLinessur cette nouvelle valeur.

TextView.setMaxLines(maxLines);

Réglez le Gravitysur Bottomune fois que le nombre maximum de lignes a été dépassé et il défilera automatiquement.

if (TextView.getLineCount() >= maxLines) {
    TextView.setGravity(Gravity.BOTTOM);
}

Pour que cela fonctionne correctement, vous devez utiliser append()le TextView, Si setText()cela ne fonctionne pas.

TextView.append("Your Text");

L'avantage de cette méthode est qu'elle peut être utilisée dynamiquement indépendamment heightdu vôtre TextViewet du texte size. Si vous décidez d'apporter des modifications à votre mise en page, ce code fonctionnerait toujours.

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.