it-swarm.com.ru

Центр текста в тосте в Android

Мне было интересно, если бы был способ отобразить весь текст в тосте, чтобы быть в центре. Например, у меня есть тост с двумя строками текста. По чисто эстетическим причинам я бы хотел, чтобы текст был выровнен по центру, а не по левому краю. Я просмотрел документацию и ничего не могу найти по этому поводу. Есть ли простой способ сделать это, что я пропустил?

Благодаря Крис

47
Chris Robinson

Используйте функцию Toast setView(view) для предоставления View с Gravity.CENTER.

14
Sameer Segal

Адаптировано из другой ответ :

Toast toast = Toast.makeText(this, "Centered\nmessage", Toast.LENGTH_SHORT);
TextView v = (TextView) toast.getView().findViewById(Android.R.id.message);
if( v != null) v.setGravity(Gravity.CENTER);
toast.show();
87
Marc

Тост построен на TextView и его гравитация по умолчанию выравнивается по левому краю. Итак, вам нужно создать свой собственный TextView, например, такой: 

<TextView  
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent" 
    Android:gravity="center_vertical|center_horizontal"
    Android:text="all the text you want"
/>

И вы назначаете TextView Toast следующим образом: 

Toast t = new Toast(yourContext);
t.setView(yourNewTextView);
26
Sephy

Без хаков

String text = "Some text";
Spannable centeredText = new SpannableString(text);
centeredText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER),
            0, text.length() - 1,
            Spannable.SPAN_INCLUSIVE_INCLUSIVE);

Toast.makeText(getActivity(), centeredText, Toast.LENGTH_LONG).show();

Есть и другие выравнивания, помимо центра.

источник

18
YetAnotherUser

Это грязный хак, но

((TextView)((LinearLayout)toast.getView()).getChildAt(0))
    .setGravity(Gravity.CENTER_HORIZONTAL);
18
Mikhail
Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
8
serj

Не говоря о том, что findViewById(Android.R.id.message) ошибочна, но на случай (будущих?) Различий в реализации я сам использовал немного другой подход:

void centerText(View view) {
    if( view instanceof TextView){
        ((TextView) view).setGravity(Gravity.CENTER);
    }else if( view instanceof ViewGroup){
        ViewGroup group = (ViewGroup) view;
        int n = group.getChildCount();
        for( int i = 0; i<n; i++ ){
            centerText(group.getChildAt(i));
        }
    }
}

а потом:

Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT);
centerText(t.getView());
t.show();
4
imbryk

Это работа для меня:

Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();
2
Kumar VL

В котлин :

fun makeToast(context: Context, resId: Int) {
    val toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT)
    val view = toast.view.findViewById<TextView>(Android.R.id.message)
    view?.let {
        view.gravity = Gravity.CENTER
    }
    toast.show()
}
0
vishnu benny

Это изменение с использованием LinearLayout. :)

Toast SampleToast = Toast.makeText(this, "This is the example of centered text.\nIt is multiline text.", Toast.LENGTH_SHORT);
LinearLayout OurLayout = (LinearLayout) SampleToast.getView();

if (OurLayout.getChildCount() > 0) 
{
TextView SampleView = (TextView) OurLayout.getChildAt(0);
SampleView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
}

SampleToast.show();
0
Muhamed Huseinbašić