Programowe wyśrodkowanie tekstu TextView

86

Błagam o trochę wyrozumiałości, dopiero zaczynam od samouczków Android SDK i próbuję czegoś interesującego, czego nie ma w samym tutorialu, ale mam nadzieję, że będzie łatwe.

Próbuję wyśrodkować TextViewelement za pomocą kodu poziomo i pionowo (mogę to zrobić w XML dobrze). Widziałem kilka przykładów, jak to zrobić, gdy rodzicem jest stół lub inny przedmiot, ale mam nadzieję, że byłoby mi to łatwiejsze do zrozumienia. (ps Zapraszam do poprawiania mojej terminologii).

Oto przykładowy kod z samouczka / mojego modelu roboczego:

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

Udało mi się zlokalizować setGravitymetodę i próbowałem się nią zająć setLayoutParams, ale nie jestem pewien, jaki jest jej zakres, ponieważ nie mogę zlokalizować tego, co powinienem importować, aby uzyskać WRAP_CONTENTstałą do rozwiązania . Z tego, co zrozumiałem, centrowanie i content_wrapping + grawitacja to dwie odrębne rzeczy. Chciałbym mieć przykład, jak to zrobić w tym przypadku i może jak / gdzie znalazłbym odpowiedź w dokumentacji API?

Alex Summers
źródło
po co w ogóle traktować Textview jako układ główny?
Kalpesh Lakhani
OK Spróbujmy jeszcze raz, ponieważ nie mogę znaleźć tutaj przycisku usuwania ani edycji. MYŚLĘ, że główny kontener jest układem względnym, ponieważ używa (myślę) mojej aktywności_display_message.xml Źródłem tego samouczka jest trochę kopiuj / wklej, ale znajduje się on pod adresem: 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
zobacz moją zredagowaną odpowiedź, która może ci pomóc .. :)
Kalpesh Lakhani

Odpowiedzi:

246
yourTextView.setGravity(Gravity.CENTER);
Syn3sthete
źródło
Idealnie, krótko i słodko! Działało jak urok! Widzę również, że istnieją właściwości CENTER_HORIZONTAL i CENTER_VERTICAL. Dziękuję Steve!
Alex Summers
2
Należy pamiętać, że działa to tylko wtedy, gdy android:textAlignment="gravity"atrybut jest ustawiony na grawitację. W przeciwnym razie textAlignment zastępuje.
velis
1
do programowego ustawiania textAlignment; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji
25

Dynamiczne wyśrodkowanie

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Nirav Ranpara
źródło
Zepsuta wersja textView.setGravity (Gravity.CENTER);, również działająca i cudowna odpowiedź. Dziękuję, Nirav!
Alex Summers
Szkoda, że ​​nie mogę, jestem nowy i nie mam wystarczającej liczby przedstawicieli, aby to głosować. Dobrze dam Hariemu przyczynę czeku, OBA twoje odpowiedzi są trafne, a biedak mógłby użyć rep;), co nie umniejsza faktu, że twoja odpowiedź była równie pomocna. (Jeśli będę miał szansę, gdy moja reprezentacja wzrośnie, na pewno zagłosuję wyżej!)
Alex Summers
5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

i

text.setGravity(Gravity.TOP);

i

text.setGravity(Gravity.BOTTOM);

i

text.setGravity(Gravity.LEFT);

i

text.setGravity(Gravity.RIGHT);

i

text.setGravity(Gravity.CENTER_VERTICAL);

i

text.setGravity(Gravity.CENTER_HORIZONTAL);

I więcej również dostępnych

Naveen Tamrakar
źródło
5

to na pewno zadziała.

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
źródło
2
Wydaje się, że LinearLayout nie ma właściwości CENTER_IN_PARENT, gdy jest dziedziczona z android.widget.LinearLayout; Czy coś mi brakuje?
Alex Summers
2

Spróbuj dodać następujący kod, aby zastosować parametry układu do TextView

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);
Antrromet
źródło
4
Wydaje się, że LinearLayout nie ma właściwości CENTER_IN_PARENT.
Alex Summers
2

jeśli rozmiar tekstu jest mały, należy ustawić szerokość widoku tekstu na „fill_parent”. Następnie możesz ustawić swoją TextView Gravity na środku:

TextView textView = new TextView(this);
textView.setText(message);
textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);
arif ardiansyah
źródło
1

Aby programowo wyśrodkować TextViewtekst w Kotlinie, możesz użyć następujących poleceń:

textview.gravity = Gravity.CENTER
Reklamy
źródło
1

wypróbuj tę metodę

  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
źródło
0

Te dwie rzeczy muszą iść razem, aby to zadziałało. Przez chwilę drapałem się w głowę.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
thesamoanppprogrammer
źródło