目前,我正在尝试开发一款应用。 我不知道如何更改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”的地方设置一个变量..我尝试过使用局部变量..但它不起作用
任何有关示例源代码的帮助对我来说都非常棒。
答案 0 :(得分: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();
这对我来说就像一个魅力!
答案 1 :(得分:18)
来自官方文件:
如果简单的短信不够,您可以为Toast通知创建自定义布局。要创建自定义布局,请在XML或应用程序代码中定义View布局,并将根View对象传递给
setView(View)
方法。
点击官方Google文档链接后会提供示例。
答案 2 :(得分: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);
}
}
答案 3 :(得分:2)
不幸的是,Java页面上的代码被窃听了。这是一个你可以实现的工作函数的链接,它为你提供文本(我知道,因为我测试了它),并且有一点点别出心裁,可以扩展为传递大小,颜色等参数...
Toast字体大小功能here
答案 4 :(得分: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()
答案 5 :(得分:0)
我在Kotlin中使用了此解决方案
在CustomView或片段中
fun persianToast(message: String): Toast {
return Toast.makeText(context, message, Toast.LENGTH_SHORT).also {
val view = it.view as LinearLayout
val tv = view.getChildAt(0) as TextView
val typeFace = Typeface.createFromAsset(context?.assets, MyApplication.getFont(MyApplication.LIGHT_FONT))
tv.typeface = typeFace
}
}
MyApplication类:
class MyApplication : Application() {
companion object {
const val NORMAL_FONT = 0
const val BOLD_FONT = 1
const val MEDIUM_FONT = 2
const val LIGHT_FONT = 3
const val ULTRA_LIGHT_FONT = 4
@JvmStatic
fun getFont(type: Int): String {
return when (type) {
LIGHT_FONT -> "font/fontLight.ttf"
BOLD_FONT -> "font/fontBold.ttf"
MEDIUM_FONT -> "font/fontMedium.ttf"
ULTRA_LIGHT_FONT -> "font/fontUltraLight.ttf"
else -> "font/fontNormal.ttf"
}
}
}
用于片段:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Toast(context)
persianToast("javid sattar").show()
}
祝你好运!