Android中的Toast中心文字

Son*_*man 56 android text center alignment toast

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

谢谢克里斯

Mar*_*arc 101

改编自另一个答案:

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();
Run Code Online (Sandbox Code Playgroud)

  • 为什么默认引力不是Gravity.CENTER?傻机器人! (6认同)
  • 我不知道为什么,但我在 Android 11 (API-30) 上失败了此方法。 (2认同)

Sep*_*phy 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"
/>
Run Code Online (Sandbox Code Playgroud)

并将TextView分配给Toast,如下所示:

Toast t = new Toast(yourContext);
t.setView(yourNewTextView);
Run Code Online (Sandbox Code Playgroud)


Mik*_*ail 19

这是肮脏的黑客,但是

((TextView)((LinearLayout)toast.getView()).getChildAt(0))
    .setGravity(Gravity.CENTER_HORIZONTAL);
Run Code Online (Sandbox Code Playgroud)

  • 注意:试过这个并且它在4.0.2上不起作用 (3认同)
  • 大!确保使用`ClassCastException` catch包围以确保Toasts的视图层次结构在将来发生变化时是安全的. (2认同)
  • 在toast.getView()返回的视图上使用findViewById(android.R.id.message)以确保所有版本的工作代码 (2认同)

Yet*_*ser 19

没有黑客攻击:

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();
Run Code Online (Sandbox Code Playgroud)

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

资源

  • 它仍然适用于 Android 11 (API-30)。 (2认同)

Sam*_*gal 15

使用吐司的setView(view)功能,以提供一个ViewGravity.CENTER.


小智 9

Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
Run Code Online (Sandbox Code Playgroud)

  • 这不是文本的中心,而是吐司本身. (27认同)

imb*_*ryk 5

不是说这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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

进而:

Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT);
centerText(t.getView());
t.show();
Run Code Online (Sandbox Code Playgroud)