Centrare il testo TextView a livello di codice


87

Chiedo un po 'di clemenza qui, sto appena iniziando con i tutorial di Android SDK e sto tentando qualcosa di interessante che non è nel tutorial stesso, ma spero sia facile.

Sto cercando di centrare un TextViewelemento tramite codice orizzontalmente e verticalmente (posso farlo in XML benissimo). Ho visto diversi esempi di come farlo quando il genitore è una tabella o qualche altro oggetto, ma spero che questo mi sia più facile da capire. (ps Sentiti libero di correggere la mia terminologia).

Ecco il codice di esempio dal tutorial / il mio modello di lavoro:

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);
    }
}

Sono riuscito a individuare il setGravitymetodo e ho provato a dilettarmi con setLayoutParamsesso, ma non sono sicuro di quale sia lo scopo perché non riesco a individuare ciò che dovrei importare per ottenere la WRAP_CONTENTcostante da risolvere . Da quello che ho capito, centratura e content_wrapping + gravità sono due cose separate. Vorrei un esempio di come fare entrambe le cose in questo caso e forse come / dove avrei trovato la risposta nella documentazione API?


perché prendere textview come layout di root?
Kalpesh Lakhani

OK Proviamo di nuovo poiché non riesco a trovare un pulsante Elimina o modifica qui. PENSO che il contenitore principale sia un layout relativo poiché utilizza (penso) la mia attività_display_message.xml La fonte di questo tutorial è un po 'copia / incolla ma si trova in: 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

vedi la mia risposta modificata potrebbe aiutarti .. :)
Kalpesh Lakhani

Risposte:


249
yourTextView.setGravity(Gravity.CENTER);

Perfetto, breve e dolce! Ha funzionato come un fascino! Vedo anche che ci sono proprietà CENTER_HORIZONTAL e CENTER_VERTICAL. Grazie Steve!
Alex Summers

2
Tieni presente che funziona solo se l' android:textAlignment="gravity"attributo è impostato su gravità. In caso contrario, textAlignment ha la priorità.
velis

1
per impostare textAlignment a livello di programmazione; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji

25

Per centro dinamico

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

Versione scomposta di textView.setGravity (Gravity.CENTER) ;, anche una risposta funzionante e meravigliosa. Grazie Nirav!
Alex Summers

Vorrei poterlo fare, sono nuovo e non abbastanza rappresentante per votare. Darò ad Hari il controllo perché bene, ENTRAMBE le tue risposte sono esatte e il poveretto potrebbe usare di più il rappresentante;) questo non toglie che la tua risposta sia stata altrettanto utile. (Se avrò la possibilità quando il mio rappresentante aumenta, sarò sicuro di votare entrambi!)
Alex Summers

6

questo funzionerà di sicuro ..

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

2
LinearLayout non sembra avere una proprietà CENTER_IN_PARENT quando ereditata da android.widget.LinearLayout; Mi sto perdendo qualcosa?
Alex Summers

5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

e

text.setGravity(Gravity.TOP);

e

text.setGravity(Gravity.BOTTOM);

e

text.setGravity(Gravity.LEFT);

e

text.setGravity(Gravity.RIGHT);

e

text.setGravity(Gravity.CENTER_VERTICAL);

e

text.setGravity(Gravity.CENTER_HORIZONTAL);

E altro ancora disponibile


2

Prova ad aggiungere il codice seguente per applicare i parametri di layout a TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);

4
LinearLayout non sembra avere una proprietà CENTER_IN_PARENT.
Alex Summers

2

se la dimensione del testo è piccola, dovresti rendere la larghezza della visualizzazione del testo "fill_parent". Dopodiché, puoi impostare il tuo TextView Gravity al centro:

TextView textView = new TextView(this);
textView.setText(message);
textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);

1

Puoi usare quanto segue per centrare a livello di TextViewcodice il testo in Kotlin:

textview.gravity = Gravity.CENTER

1

prova questo metodo

  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);
}

0

Questi due devono andare insieme perché funzioni. Mi sto grattando la testa da un po '.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.