Ответ 1
Используйте функцию Toast setView(view)
для поставки View
с помощью Gravity.CENTER
.
Мне было интересно, есть ли способ показать весь текст в тосте, чтобы он был центрирован. Например, у меня есть тост, в котором есть две строки текста. По чисто эстетическим причинам я хотел бы, чтобы текст выравнивался по центру, а не выравнивался по левому краю. Я просмотрел документацию и не могу найти ничего об этом. Есть ли простой способ сделать это, что я пропустил?
Спасибо Крис
Используйте функцию Toast setView(view)
для поставки 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();
Toast построен на 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();
простой код для тоста больше всего будет