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?

Nate
la source

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 .

Maragues
la source
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);
fréquence radio
la source
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"
 ...
 .../>
Bajrang Hudda
la source
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.

Irshu
la source
2

Utilisez ce code

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");
Faxriddin Abdullayev
la source
2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

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

DAS
la source
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.

Roman Fernandez
la source