Centrer le texte TextView par programme

86

Je vous prie de faire preuve de clémence ici, je ne fais que commencer par les didacticiels du SDK Android et j'essaie quelque chose par intérêt qui ne figure pas dans le didacticiel lui-même, mais j'espère que ce serait facile.

J'essaie de centrer un TextViewélément via le code horizontalement et verticalement (je peux le faire en XML très bien). J'ai vu plusieurs exemples de la façon de procéder lorsque le parent est une table ou un autre objet, mais j'espère que cela me sera plus facile à comprendre. (ps N'hésitez pas à corriger ma terminologie).

Voici l'exemple de code du tutoriel / mon modèle de travail:

package com.example.myfirstapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;


public class DisplayMessageActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        textView.setGravity(View.TEXT_ALIGNMENT_GRAVITY);

        setContentView(textView);
    }
}

J'ai réussi à localiser la setGravityméthode, et j'ai essayé de m'essayer au setLayoutParamsfor it, mais je ne suis pas sûr de sa portée car je ne peux pas localiser ce que je devrais importer pour obtenir la WRAP_CONTENTconstante à résoudre . D'après ce que j'ai compris, le centrage et le content_wrapping + la gravité sont deux choses distinctes. Je voudrais un exemple de comment faire les deux dans ce cas et peut-être comment / où j'aurais trouvé la réponse dans la documentation de l'API?

Alex Summers
la source
pourquoi prendre textview comme mise en page racine?
Kalpesh Lakhani
OK Essayons à nouveau car je ne trouve pas de bouton de suppression ou de modification ici. JE PENSE que le conteneur principal est une mise en page relative car il utilise (je pense) mon activity_display_message.xml La source de ce tutoriel est un peu copier / coller-ish mais il se trouve à: bit.ly/VDh9yS <RelativeLayout xmlns: android = " schemas.android.com/apk/res/android " xmlns: tools = " schemas.android.com/tools " android: layout_width = "match_parent" android: layout_height = "match_parent" tools: context = ". DisplayMessageActivity"> < / RelativeLayout>
Alex Summers
voir ma réponse modifiée cela pourrait vous aider .. :)
Kalpesh Lakhani

Réponses:

246
yourTextView.setGravity(Gravity.CENTER);
Syn3sthete
la source
Parfait, court et doux! A travaillé comme du charme! Je vois également qu'il existe des propriétés CENTER_HORIZONTAL et CENTER_VERTICAL. Merci Steve!
Alex Summers
2
Veuillez noter que cela ne fonctionne que si l' android:textAlignment="gravity"attribut est défini sur la gravité. Sinon, textAlignment remplace.
velis
1
pour régler textAlignment par programmation; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji
25

Pour centrer dynamiquement

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Nirav Ranpara
la source
Version décomposée de textView.setGravity (Gravity.CENTER) ;, également une réponse fonctionnelle et merveilleuse. Merci Nirav!
Alex Summers
J'aimerais pouvoir, je suis nouveau et pas assez de représentants pour voter. Je vais bien donner à Hari la cause du chèque, vos deux réponses sont parfaites et le pauvre gars pourrait utiliser le représentant davantage;) cela ne soustrait pas le fait que votre réponse était tout aussi utile. (Si j'en ai l'occasion lorsque mon représentant monte, assurez-vous de voter tous les deux!)
Alex Summers
5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

et

text.setGravity(Gravity.TOP);

et

text.setGravity(Gravity.BOTTOM);

et

text.setGravity(Gravity.LEFT);

et

text.setGravity(Gravity.RIGHT);

et

text.setGravity(Gravity.CENTER_VERTICAL);

et

text.setGravity(Gravity.CENTER_HORIZONTAL);

Et plus également disponible

Naveen Tamrakar
la source
5

cela fonctionnera à coup sûr.

RelativeLayout layout = new RelativeLayout(R.layout.your_layour); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
params.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(params);
textView.setGravity(Gravity.CENTER);

layout.addView(textView);

setcontentView(layout);
Kalpesh Lakhani
la source
2
LinearLayout ne semble pas avoir de propriété CENTER_IN_PARENT lorsqu'il est hérité de android.widget.LinearLayout; Est-ce que je manque quelque chose?
Alex Summers
2

Essayez d'ajouter le code suivant pour appliquer les paramètres de disposition à TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);
Antrromet
la source
4
LinearLayout ne semble pas avoir de propriété CENTER_IN_PARENT.
Alex Summers
2

si la taille de votre texte est petite, vous devez faire en sorte que la largeur de votre vue de texte soit "fill_parent". Après cela, vous pouvez définir votre TextView Gravity au centre:

TextView textView = new TextView(this);
textView.setText(message);
textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);
arif ardiansyah
la source
1

Vous pouvez utiliser ce qui suit pour centrer le TextViewtexte par programme dans Kotlin:

textview.gravity = Gravity.CENTER
Les publicités
la source
1

essayez cette méthode

  public void centerTextView(LinearLayout linearLayout) {
    TextView textView = new TextView(context);
    textView.setText(context.getString(R.string.no_records));
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(18.0f);
    textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
    linearLayout.addView(textView);
}
Sai Gopi moi
la source
0

Ces deux éléments doivent aller de pair pour que cela fonctionne. Je me gratte la tête depuis un moment.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
le programmeur samoanpp
la source