厌倦了网易新闻无处不在的喷子,尝试了一下腾讯新闻,果然顿时清净了很多,当然这不是重点。个人感觉腾讯新闻客户端的Toast比较不错,相对于系统默认的Toast,更加能起到提醒的作用。于是反编译了一下,简单分享一下,其实很简单。
先看效果
背景为深灰色,支持设置图片和文字。
布局文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@ id/view_tips_layout" android:background="@drawable/tips_bg" android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"> <View android:layout_width="160.0dip" android:layout_height="160.0dip" android:layout_centerInParent="true" /> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true"> <ImageView android:gravity="center" android:layout_gravity="center" android:id="@ id/tips_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10.0dip" android:src="@drawable/tips_error" android:contentDescription="@null" /> <TextView android:textSize="17.0sp" android:textColor="#ffffffff" android:gravity="center" android:layout_gravity="center" android:id="@ id/tips_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:lineSpacingExtra="3.0dip" /> </LinearLayout> </RelativeLayout> |
---|
程序代码
1 2 3 4 5 6 7 | Toast toast = new Toast(getApplicationContext()); View toastView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.view_tips, null); ((ImageView)toastView.findViewById(R.id.tips_icon)).setImageResource(R.drawable.ic_launcher); ((TextView)toastView.findViewById(R.id.tips_msg)).setText("Error Occurs"); toast.setView(toastView); toast.setGravity(Gravity.NO_GRAVITY, 0, 0); toast.show(); |
---|
Toast默认的位置为底部水平居中。我们可以通过设置setGravity(int, int, int)来进行设置位置。该方法接受三个参数,一个Gravity常量,一个x(水平)方向上的偏移量,一个y(竖直)方向上的偏移量。
如果我们想让位置向右我们需要增加x方向上的偏移量,如果想让位置向下,增大y方向上的偏移量。
多说
我们可以根据自己的需求去设置图片,文字,背景色等样式来定制想要的Toast。
注意,涉及到长度宽度字体大小相关的建议放到dimens文件,便于我们进行设备适配。
示例下载
百度网盘