我们如何增加toast中的字体大小?

47

有没有不需要自定义就可以增加 toast 字体大小的方法?

我不想为增加文本大小而创建布局。

有什么办法吗?

谢谢,

Niki

9个回答

62

我相信可以通过以下方式实现:

    ViewGroup group = (ViewGroup) toast.getView();
    TextView messageTextView = (TextView) group.getChildAt(0);
    messageTextView.setTextSize(25);

1
这段代码在某些自定义操作系统设备上由于ClassCastException而崩溃。 java.lang.ClassCastException android.widget.RelativeLayout 无法转换为 android.widget.LinearLayout看起来在这种情况下,Toast视图是使用RelativeLayout父级实现的。 可以通过将其强制转换为ViewGroup而不是LinearLayout来修复。 - Mihir Shah

28

这是...

 Toast toast = Toast.makeText(context, R.string.yummyToast, Toast.LENGTH_SHORT);
//the default toast view group is a relativelayout
RelativeLayout toastLayout = (RelativeLayout) toast.getView();
TextView toastTV = (TextView) toastLayout.getChildAt(0);
toastTV.setTextSize(30);
toast.show();

24

以下是如何使用spans来实现该功能:

SpannableStringBuilder biggerText = new SpannableStringBuilder(text);
biggerText.setSpan(new RelativeSizeSpan(1.35f), 0, text.length(), 0);
Toast.makeText(context, biggerText, Toast.LENGTH_LONG).show();

谢谢,完美的解决方案,我可以期待吗?所以,这段代码运行得非常好。 - Najib.Nj
谢谢!运行正常。 - Black_Zerg

8

谢谢。但是即使是CustomToastView在我的Service中也无法工作。我们应该在哪里进行充气部分(onCreate还是onStartCommand)?我尝试在onCreate中,但最终出现了错误。 - Niki

2

参考 Ani 的回答,另一种允许您将文本大小设置为尺寸值的解决方案可能是:

public static void showToast(Context context, int resId) {
    Toast toast = Toast.makeText(context, resId, Toast.LENGTH_LONG);
    LinearLayout toastLayout = (LinearLayout) toast.getView();
    TextView toastTV = (TextView) toastLayout.getChildAt(0);
    toastTV.setTextSize(TypedValue.COMPLEX_UNIT_PX,
            context.getResources().getDimension(R.dimen.TEXT_SIZE));
    toast.show();
}

这可以让你匹配烤面包的大小与 TextView 和 Button 控件中指定的大小相同。

1

Nikolay 回答得很好。从启发式的角度来看,如果一个Android API方法接受CharSequence而不是String,那么你可以传递Spanned(即格式化)文本,这是一个相当安全的赌注。

如果您不想手动构建它,并且更喜欢HTML,则可以这样做:

Toast.makeText(context, Html.fromHtml("<big>Big text.</big>"), Toast.LENGTH_SHORT)

或者,如果使用字符串资源,则执行以下操作:

<string name="big_text"><big>Big text.</big></string>

"只需像这样使用它:

"
Toast.makeText(context, R.string.big_text, Toast.LENGTH_SHORT)

可用标记大都在这里有文档记录。


0

尝试这个:

SpreadsheetApp.getActive().toast(" ","这里是你想要的文本");

通过保持第一组引号为空,第二组将加粗您的文本,使其更易于阅读。

通常该行代码将是:.toast("你想要的文本","你的弹出式提示框的标题");

通过将您的文本作为标题,填入第二组引号,并留下第一组引号为空,您的文本现在更易于阅读。


0
    Toast toast = Toast.makeText(MyApplication.getContext(), "here", Toast.LENGTH_LONG);
    ViewGroup group = (ViewGroup) toast.getView();
    TextView messageTextView = (TextView) group.getChildAt(0);
    messageTextView.setTextSize(30);
    toast.show();

-2
你可以尝试将以下代码放入你的清单文件中:
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"/> 

将其放置在<Application>元素之上。

这与实际问题有什么关系? - Anuj
我猜这是一个应用程序范围的解决方案。如果Android识别到设备有大屏幕,它可能会显示更大的Toast。 - Paul Wintz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接