1、Toast控件:
通过查看源代码,发现Toast里面实现的原理是通过服务Context.LAYOUT_INFLATER_SERVICE获取一个LayoutInflater布局管理器,从而获取一个View对象(TextView),设置内容将其显示.
public static Toast makeText(Context context, CharSequence text, int duration) { Toast result = new Toast(context); LayoutInflater inflate = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null); TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message); tv.setText(text); result.mNextView = v; result.mDuration = duration; return result; }
定义布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="200dip" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/iv_my_toast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/notification" /> <TextView android:id="@+id/tv_my_toast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:text="text" /> </LinearLayout>
自定义MyToast类:
public class MyToast { /** * 显示自定义的土司 * @param context 上下文 * @param iconid 图标的id * @param text 显示的文本 */ public static void showToast(Context context,int iconid, String text){ View view = View.inflate(context, R.layout.my_toast, null); TextView tv = (TextView) view.findViewById(R.id.tv_my_toast); ImageView iv = (ImageView) view.findViewById(R.id.iv_my_toast); iv.setImageResource(iconid); tv.setText(text); Toast toast = new Toast(context); toast.setDuration(0); toast.setView(view); toast.show(); } }