Центр текста в тосте в Android - PullRequest
52 голосов
/ 19 августа 2010

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

Спасибо Chris

Ответы [ 11 ]

93 голосов
/ 21 ноября 2012

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

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();
26 голосов
/ 19 августа 2010

Тост построен на 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 t = new Toast(yourContext);
t.setView(yourNewTextView);
19 голосов
/ 01 мая 2011

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

((TextView)((LinearLayout)toast.getView()).getChildAt(0))
    .setGravity(Gravity.CENTER_HORIZONTAL);
18 голосов
/ 16 января 2015

Без хаков:

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

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

источник

15 голосов
/ 19 августа 2010

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

9 голосов
/ 07 мая 2011
Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
4 голосов
/ 24 апреля 2014

Не говоря о том, что 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();
2 голосов
/ 06 июня 2018

В Котлин :

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()
}
2 голосов
/ 13 марта 2018

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

Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();
0 голосов
/ 03 февраля 2016
Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG);
t.setText("Password Does't match...");
t.setGravity(0, 0, 0);
t.show();

простой код для тоста большинства в центре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...