Программно центрировать текст 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константа разрешилась . Насколько я понял, центрирование и content_wrapping + gravity - это две разные вещи. Мне нужен пример того, как сделать и то, и другое в этом случае, и, возможно, как / где я нашел бы ответ в документации API?

Алекс Саммерс
источник
зачем вообще использовать textview в качестве корневого макета?
Kalpesh Lakhani 08
ОК, попробуем еще раз, так как я не могу найти здесь кнопку удаления или редактирования. Я ДУМАЮ, что основной контейнер - это относительный макет, поскольку он использует (я думаю) мой activity_display_message.xml. Источник этого руководства немного скопирован / вставлен, но расположен по адресу: 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>
Алекс Саммерс
см. мой отредактированный ответ, он может вам помочь .. :)
Kalpesh Lakhani 08

Ответы:

246
yourTextView.setGravity(Gravity.CENTER);
Syn3sthete
источник
Идеально, коротко и мило! Работал как шарм! Я также вижу, что есть свойства CENTER_HORIZONTAL и CENTER_VERTICAL. Спасибо, Стив!
Alex Summers
2
Обратите внимание, что это работает, только если android:textAlignment="gravity"атрибут установлен на гравитацию. В противном случае textAlignment переопределяет.
velis
1
для программной настройки textAlignment; yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Юсрил Маулидан Раджи
25

Для динамического центра

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Нирав Ранпара
источник
Разбитая версия textView.setGravity (Gravity.CENTER);, также рабочий и замечательный ответ. Спасибо, Нирав!
Alex Summers
Если бы я мог, я новичок и у меня недостаточно репутации, чтобы проголосовать. Я собираюсь дать Хари причину проверки, ОБА твои ответы точны, и бедняга может использовать репутацию больше;) это не умаляет того факта, что твой ответ был столь же полезен. (Если у меня будет шанс, когда моя репутация повысится, я обязательно проголосую за вас обоих!)
Алекс Саммерс
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; Я что-то упускаю?
Alex Summers
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.
Alex Summers
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)
программист
источник