Xamarin.Android Toast设置背景色丢失圆角及自定义字体实现方法
问题根因
直接调用SetBackgroundColor()给Toast根视图刷纯色时,会直接覆盖系统默认Toast自带的圆角背景Drawable,相当于把原有带圆角的背景替换成了无圆角的纯色色块,圆角效果自然会丢失。
圆角效果修复方案
不需要重写整个Toast布局,只要把纯色背景替换成自定义的带圆角的形状Drawable即可,具体实现:
- 先创建带圆角的矩形Drawable,匹配你要的
#98A5AD背景色:
var toastBgDrawable = new GradientDrawable(); toastBgDrawable.SetShape(ShapeType.Rectangle); toastBgDrawable.SetCornerRadius(24); // 圆角半径可按需调整,单位为像素 toastBgDrawable.SetColor(Android.Graphics.Color.ParseColor("#98A5AD"));
- 把这个Drawable设置为Toast视图的背景,替换原来的纯色设置逻辑:
Toast toast = Toast.MakeText(Application.Context, message, ToastLength.Short); // 替换原来的toast.View.SetBackgroundColor(...)代码行 toast.View.Background = toastBgDrawable; toast.SetGravity(GravityFlags.Center, 0, 0); toast.Show();
这种方式生成的背景完全保留自定义圆角,不会被纯色覆盖。
自定义字体实现方法
系统默认Toast内部,承载文本的控件是ID为Android.Resource.Id.Message的TextView,只要拿到这个控件实例,加载自定义字体赋值即可,步骤:
- 把字体文件(比如
xxx.ttf)放到项目Assets/Fonts目录下,将文件的生成操作设置为AndroidAsset,确保打包时能正常读取。 - 在Toast创建逻辑中,定位文本控件并绑定自定义字体:
Toast toast = Toast.MakeText(Application.Context, message, ToastLength.Short); // 获取Toast内部的文本显示控件 var messageTv = toast.View.FindViewById<TextView>(Android.Resource.Id.Message); // 从Assets加载自定义字体 var customTypeface = Typeface.CreateFromAsset(Application.Context.Assets, "Fonts/xxx.ttf"); messageTv.Typeface = customTypeface;
注意:不要直接给Toast的根视图设置Typeface属性,根视图是ViewGroup容器,字体属性只对文本类控件生效,必须定位到实际承载文本的TextView再设置。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

