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.


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

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

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


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

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

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

1

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

textview.gravity = Gravity.CENTER

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

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.