Текст центра в тосте в Android

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

Спасибо Крису

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

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

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

Тост построен на 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); 

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

 ((TextView)((LinearLayout)toast.getView()).getChildAt(0)) .setGravity(Gravity.CENTER_HORIZONTAL); 

Без хаков:

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

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

источник

 Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); 

Не ссылаясь на то, что 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(); 

Этот вариант заключается в использовании 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(); 
 Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG); t.setText("Password Does't match..."); t.setGravity(0, 0, 0); t.show(); 

Простой код для тоста