Android中的Toast中心文字

时间:2010-08-19 13:03:23

标签: android text alignment center toast

我想知道是否有办法在toast中显示所有文本居中。例如,我有一个吐司,里面有两行文字。出于纯粹的美学原因,我希望文本以居中对齐而不是左对齐。我查看了文档,找不到任何相关信息。有没有一种简单的方法可以做到这一点我错过了?

由于 克里斯

11 个答案:

答案 0 :(得分:92)

改编自another answer

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

答案 1 :(得分:26)

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

答案 2 :(得分:19)

这是肮脏的黑客,但

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

答案 3 :(得分:18)

没有黑客攻击:

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

除了中心之外还有另一个路线。

source

答案 4 :(得分:15)

使用Toast的setView(view)功能为View提供Gravity.CENTER

答案 5 :(得分:8)

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

答案 6 :(得分:4)

不是说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();

答案 7 :(得分:2)

这对我有用:

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

答案 8 :(得分:2)

kotlin

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

答案 9 :(得分:0)

这种变化与使用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();

答案 10 :(得分:-3)

Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG);
t.setText("Password Does't match...");
t.setGravity(0, 0, 0);
t.show();

toast的简单代码最为中心