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?


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

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

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


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

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

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

1

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

textview.gravity = Gravity.CENTER

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

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.