Centralize o texto TextView de maneira programática

86

Eu imploro alguma leniência aqui, estou apenas começando com os tutoriais do SDK do Android e estou tentando algo fora do interesse que não está no tutorial em si, mas espero que seja fácil.

Estou tentando centralizar um TextViewitem via código horizontal e verticalmente (posso fazer isso em XML muito bem). Já vi vários exemplos de como fazer isso quando o pai é uma mesa ou algum outro objeto, mas espero que seja mais fácil de entender. (ps Sinta-se à vontade para corrigir minha terminologia).

Aqui está o código de exemplo do tutorial / meu modelo de trabalho:

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

Consegui localizar o setGravitymétodo e tentei me aventurar setLayoutParamsnele, mas não tenho certeza de qual é o escopo dele, pois não consigo localizar o que devo importar para obter a WRAP_CONTENTconstante para resolver . Pelo que entendi, centralização e content_wrapping + gravidade são duas coisas distintas. Gostaria de um exemplo de como fazer as duas coisas neste caso e talvez como / onde eu teria encontrado a resposta na documentação da API?

Alex Summers
fonte
por que considerar o textview como layout de raiz?
Kalpesh Lakhani,
OK, vamos tentar de novo, pois não consigo encontrar um botão excluir ou editar aqui. ACHO que o contêiner principal é um layout relativo, pois está usando (eu acho) meu activity_display_message.xml A fonte deste tutorial é um pouco copiar / colar, mas está localizado em: 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,
veja minha resposta editada, ela pode ajudar você .. :)
Kalpesh Lakhani

Respostas:

246
yourTextView.setGravity(Gravity.CENTER);
Syn3sthete
fonte
Perfeito, curto e doce! Funcionou como charme! Também vejo que existem propriedades CENTER_HORIZONTAL e CENTER_VERTICAL. Obrigado Steve!
Alex Summers,
2
Observe que isso só funciona se o android:textAlignment="gravity"atributo for definido como gravidade. Caso contrário, textAlignment substitui.
velis
1
para definir textAlignment programaticamente; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji
25

Para centrar dinamicamente

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Nirav Ranpara
fonte
Versão dividida de textView.setGravity (Gravity.CENTER) ;, também uma resposta funcional e maravilhosa. Obrigado Nirav!
Alex Summers,
Queria poder, sou novo e não tenho representante suficiente para votar. Vou dar a Hari a causa do cheque, bem, AMBAS as suas respostas estão corretas e o pobre sujeito poderia usar mais o representante;) isso não subtrai do fato de que sua resposta foi igualmente útil. (Se eu tiver a chance quando meu representante subir, não se esqueça de votar em vocês dois!)
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 mais também disponíveis

Naveen Tamrakar
fonte
5

isso vai funcionar com certeza ..

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
fonte
2
LinearLayout não parece ter uma propriedade CENTER_IN_PARENT quando herdada de android.widget.LinearLayout; Estou esquecendo de algo?
Alex Summers,
2

Tente adicionar o seguinte código para aplicar os parâmetros de layout ao TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);
Antrromet
fonte
4
LinearLayout não parece ter uma propriedade CENTER_IN_PARENT.
Alex Summers,
2

se o tamanho do texto for pequeno, você deve definir a largura da visualização do texto como "fill_parent". Depois disso, você pode definir a gravidade do TextView para o 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
fonte
1

Você pode usar o seguinte para centralizar TextViewtexto de maneira programática em Kotlin:

textview.gravity = Gravity.CENTER
Publicidades
fonte
1

tente 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
fonte
0

Esses dois precisam andar juntos para que funcione. Estou coçando minha cabeça há um tempo.

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