Програмно центруйте текст TextView


86

Я прошу поблажливості тут, я лише починаю з підручників Android SDK і намагаюся зробити щось з інтересу, чого немає в самому навчальному посібнику, але, сподіваюся, це буде легко.

Я намагаюся відцентрувати TextViewелемент за допомогою коду горизонтально та вертикально (я можу це зробити в XML просто чудово). Я бачив кілька прикладів того, як це зробити, коли батьком є ​​таблиця чи інший об'єкт, але, сподіваюся, це було б простіше зрозуміти мені. (ps Не соромтеся виправляти мою термінологію).

Ось приклад коду з підручника / моєї робочої моделі:

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

Мені вдалося знайти setGravityметод, і я спробував розібратися в setLayoutParamsньому, але я не впевнений, яка область для нього, оскільки я не можу знайти те, що я повинен імпортувати, щоб отримати WRAP_CONTENTконстанту для вирішення . З того, що я зрозумів, центрування та обгортання вмісту + гравітація - це дві окремі речі. Я хотів би приклад того, як робити і в цьому випадку, і, можливо, як / де я знайшов би відповідь у документації API?


навіщо взагалі сприймати textview як кореневий макет?
Калпеш Лахані,

Добре Давайте спробуємо це ще раз, оскільки я не можу знайти тут кнопку видалення або редагування. Я ДУМАЮ, що основний контейнер - це відносний макет, оскільки він використовує (я думаю) мій Activity_display_message.xml Джерелом цього підручника є біт copy / paste-ish, але він знаходиться за адресою: 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>
Алекс Саммерс

див. мою відредаговану відповідь, це може вам допомогти .. :)
Калпеш Лахані

Відповіді:


246
yourTextView.setGravity(Gravity.CENTER);

Ідеально, коротко і солодко! Працював як шарм! Я також бачу, що існують властивості CENTER_HORIZONTAL та CENTER_VERTICAL. Дякую Стіву!
Alex Summers,

2
Зверніть увагу, що це працює, лише якщо для android:textAlignment="gravity"атрибута встановлено значення сили тяжіння. В іншому випадку замінює textAlignment.
Веліс,

1
для програмного врегулювання textAlignment; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Юсріл Маулідан Раджі,

25

Для динамічного центрування

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

Зламана версія textView.setGravity (Gravity.CENTER) ;, також робоча і чудова відповідь. Дякую Нірав!
Алекс Саммерс

Якби я не міг, я новий і не маю достатньо представників, щоб проголосувати за нього. Я збираюся дати Харі причину перевірки добре, І ТВІ відповіді на місці, і бідолаха міг би більше використовувати представника;), що не віднімається від того, що ваша відповідь була однаково корисною. (Якщо я отримаю шанс, коли мій представник підніметься, не забудьте проголосувати за вас обох!)
Алекс Саммерс

5
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

і

text.setGravity(Gravity.TOP);

і

text.setGravity(Gravity.BOTTOM);

і

text.setGravity(Gravity.LEFT);

і

text.setGravity(Gravity.RIGHT);

і

text.setGravity(Gravity.CENTER_VERTICAL);

і

text.setGravity(Gravity.CENTER_HORIZONTAL);

І багато іншого також доступні


5

це буде працювати точно ..

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 не має властивості CENTER_IN_PARENT, коли успадковується від android.widget.LinearLayout; Мені чогось не вистачає?
Алекс Саммерс

2

Спробуйте додати наступний код для застосування параметрів макета до 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 не має властивості CENTER_IN_PARENT.
Алекс Саммерс

2

якщо розмір тексту невеликий, ширину подання тексту слід зробити "fill_parent". Після цього ви можете встановити TextView Gravity в центр:

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

1

Ви можете використовувати наступне для програмного центрування TextViewтексту в Kotlin:

textview.gravity = Gravity.CENTER

1

спробуйте цей метод

  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

Цим двом потрібно йти разом, щоб це спрацювало. Я чешу голову деякий час.

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.