Centrar programáticamente el texto TextView

86

Ruego un poco de indulgencia aquí, recién estoy comenzando con los tutoriales del SDK de Android y estoy intentando algo por interés que no está en el tutorial en sí, pero espero que sea fácil.

Estoy tratando de centrar un TextViewelemento a través de código horizontal y verticalmente (puedo hacerlo en XML muy bien). He visto varios ejemplos de cómo hacer esto cuando el padre es una mesa o algún otro objeto, pero espero que esto sea más fácil de entender para mí. (PD: siéntase libre de corregir mi terminología).

Aquí está el código de ejemplo del tutorial / mi modelo de trabajo:

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

Me las arreglé para ubicar el setGravitymétodo y traté de incursionar en setLayoutParamsél, pero no estoy seguro de cuál es el alcance, ya que no puedo ubicar lo que debería importar para que la WRAP_CONTENTconstante se resuelva. . Por lo que entendí, centrar y content_wrapping + gravity son dos cosas separadas. Me gustaría un ejemplo de cómo hacer ambas cosas en este caso y tal vez cómo / dónde habría encontrado la respuesta en la documentación de la API.

Alex Summers
fuente
¿Por qué tomar textview como diseño raíz?
Kalpesh Lakhani
OK Intentémoslo de nuevo, ya que no puedo encontrar un botón de eliminar o editar aquí. CREO que el contenedor principal es un diseño relativo ya que está usando (creo) mi activity_display_message.xml La fuente de este tutorial es un poco copiar / pegar-ish pero se encuentra en: 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
ver editado mi respuesta puede ser que le ayuda .. :)
Kalpesh Lakhani

Respuestas:

246
yourTextView.setGravity(Gravity.CENTER);
Syn3sthete
fuente
¡Perfecto, corto y dulce! ¡Funcionó de maravilla! También veo que hay propiedades CENTER_HORIZONTAL y CENTER_VERTICAL. ¡Gracias Steve!
Alex Summers
2
Tenga en cuenta que esto solo funciona si el android:textAlignment="gravity"atributo está configurado como gravedad. De lo contrario, textAlignment anula.
Velis
1
para configurar textAlignment mediante programación; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji
25

Para centrar dinámicamente

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Nirav Ranpara
fuente
Versión desglosada de textView.setGravity (Gravity.CENTER) ;, también una respuesta funcional y maravillosa. ¡Gracias Nirav!
Alex Summers
Ojalá pudiera, soy nuevo y no tengo suficiente representante para votarlo. Voy a darle a Hari el cheque porque bien, AMBAS tus respuestas son acertadas y el pobre podría usar más la repetición;) eso no resta al hecho de que tu respuesta fue igualmente útil. (Si tengo la oportunidad cuando mi reputación aumente, ¡me aseguraré de votar a ambos!)
Alex Summers
5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

y

text.setGravity(Gravity.TOP);

y

text.setGravity(Gravity.BOTTOM);

y

text.setGravity(Gravity.LEFT);

y

text.setGravity(Gravity.RIGHT);

y

text.setGravity(Gravity.CENTER_VERTICAL);

y

text.setGravity(Gravity.CENTER_HORIZONTAL);

Y más también disponible

Naveen Tamrakar
fuente
5

esto funcionará seguro ..

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
fuente
2
LinearLayout no parece tener una propiedad CENTER_IN_PARENT cuando se hereda de android.widget.LinearLayout; ¿Me estoy perdiendo de algo?
Alex Summers
2

Intente agregar el siguiente código para aplicar los parámetros de diseño al TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);
Antrromet
fuente
4
LinearLayout no parece tener una propiedad CENTER_IN_PARENT.
Alex Summers
2

si el tamaño de su texto es pequeño, debe hacer que el ancho de la vista de texto sea "fill_parent". Después de eso, puede configurar su TextView Gravity en el centro:

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

Puede utilizar lo siguiente para centrar el TextViewtexto mediante programación en Kotlin:

textview.gravity = Gravity.CENTER
Anuncios
fuente
1

prueba este método

  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 Me
fuente
0

Estos dos necesitan ir juntos para que funcione. He estado rascándome la cabeza por un tiempo.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
thesamoanppprogrammer
fuente