更改Toast字体

问题描述 投票:19回答:5

目前,我正在尝试开发一款应用。我不知道如何更改Toast字体。 。

 final OnClickListener clickListener = new OnClickListener() {

    public void onClick(View v) {
            try {
                Toast.makeText(nova.this,"Hello", 500000).show();
            }
            catch (Exception e) {
                Toast.makeText(nova.this,"Exception:" +e, 500000);
            }
        }
    };

我想用我尝试过的TypeFace自定义字体更改文本“Hello”。

然后,我想在“TextClicked”的地方设置一个变量..我已尝试使用局部变量..但它不起作用

任何有关示例源代码的帮助对我来说都非常棒。

android toast android-fonts
5个回答
18
投票

从官方文档:

Create your custom ToastView

如果简单的短信不够,您可以为Toast通知创建自定义布局。要创建自定义布局,请在XML或应用程序代码中定义视图布局,并将根View对象传递给setView(View)方法。

以下链接到官方Google文档将提供示例。


32
投票

答案在这里:https://stackoverflow.com/a/13231981

重构一点之后:

    Toast toast = Toast.makeText(context, R.string.yummyToast, Toast.LENGTH_SHORT);
    LinearLayout toastLayout = (LinearLayout) toast.getView();
    TextView toastTV = (TextView) toastLayout.getChildAt(0);
    toastTV.setTextSize(30);
    toast.show();

这对我来说就像一个魅力!


9
投票

您可以使用SpannableString来设置字体:

Typeface font = Typeface.createFromAsset(getAssets(), "fonts/ATaha.ttf");
SpannableString efr = new SpannableString("Toast font changed!");
efr.setSpan(new TypefaceSpan(font), 0, efr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Toast.makeText(this, efr, Toast.LENGTH_SHORT).show();

具有特定字体集的自定义Span类:

public class TypefaceSpan extends MetricAffectingSpan {
    private Typeface mTypeface;
    public TypefaceSpan(Typeface typeface) {
        mTypeface = typeface;
    }

    @Override
    public void updateMeasureState(TextPaint p) {
        p.setTypeface(mTypeface);
        p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        tp.setTypeface(mTypeface);
        tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }
}

2
投票

不幸的是,Java页面上的代码被窃听了。这是一个你可以实现的工作函数的链接,它为你提供了文本(我知道,因为我测试了它),并且有一点点别出心裁,可以扩展为传递大小,颜色等参数...

Toast字体大小功能here


0
投票

Kotlin功能:

fun makeLargeTextToast(text: CharSequence): Toast {
    return Toast.makeText(applicationContext, text, Toast.LENGTH_LONG).also {
        val toastLayout = it.view as LinearLayout
        val toastTV = toastLayout.getChildAt(0) as TextView
        toastTV.textSize = 30f
    }
}

用它作为:

makeLargeTextToast("text message").show()
© www.soinside.com 2019 - 2024. All rights reserved.