Android中Toast的setMargin方法作用是什么?为何Toast显示在屏幕右上侧?
问题解答
1. setMargin方法的作用
Android的Toast.setMargin(float horizontalMargin, float verticalMargin)的两个参数都是相对于容器(一般为整个屏幕可用区域)宽高的比例值,而非像素值:
horizontalMargin:水平方向边距占屏幕总宽度的比例,该边距会同时作用于Toast的左右两侧verticalMargin:垂直方向边距占屏幕总高度的比例,该边距会同时作用于Toast的上下两侧
正常使用场景下该参数传入0~0.5之间的小数即可,比如toast.setMargin(0.05f, 0.1f)代表Toast左右两侧各留出5%屏幕宽度的空白,上下两侧各留出10%屏幕高度的空白。
2. Toast出现在右上角的原因
你代码中调用的是toast.setMargin(20, 20),传入的整数20会自动转换为浮点值20.0f,相当于要求系统给Toast设置:左右两侧各留出20倍屏幕宽度的边距,上下两侧各留出20倍屏幕高度的边距。
系统显然无法满足这么大的边距要求,而Toast默认的布局重心是「水平居中 + 底部对齐」,系统会自动修正Toast的位置到屏幕可用范围的边缘:垂直方向要求底部留出20倍屏幕高度的边距,Toast只能被推到屏幕最顶部;水平方向要求左右各留20倍屏幕宽度的边距,Toast只能被推到屏幕最右侧,最终就呈现出你截图里右上角的显示效果。
正确使用建议
如果要自定义Toast的位置,建议使用setGravity方法直接指定重心和像素偏移,示例:
// 让Toast显示在右上角,距离顶部50px,距离右侧50px toast.setGravity(Gravity.TOP | Gravity.RIGHT, 50, 50);
如果只是要给Toast加少量自适应边距,给setMargin传入0~0.5之间的小数值即可。
内容的提问来源于stack exchange,提问作者user16660143
相关产品推荐
相关产品推荐

