Android 自带的Toast 样式太过单一,我们怎么样自定义Toast满足我们的需求呢,比如下载文件失败,我们需要图片加文字的提示:
如上图所示,我们需要重写Toast:
package com.example.myapplication;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by Administrator on 2016/7/22.
*/
public class CustomToast {
private Toast toast;
public CustomToast(){
}
/**
* 显示Toast
* @param context
* @param root
* @param tvString
*/
public void ToastShow(Context context, ViewGroup root, String tvString){
//加载Toast布局
View layout = LayoutInflater.from(context).inflate(R.layout.activity_toast,root,false);
TextView text = (TextView) layout.findViewById(R.id.text);
ImageView mImageView = (ImageView) layout.findViewById(R.id.iv);
mImageView.setBackgroundResource(R.mipmap.break_heart);
text.setText(tvString);
//text.setTextColor(R.color.aqua);
toast = new Toast(context);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
//设到Toast里
toast.setView(layout);
toast.show();
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="400dp"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="8dp"
android:background="#DAAA"
android:id="@+id/toast_layout_root">
<LinearLayout
android:layout_width="200dp"
android:gravity="center"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:layout_gravity="center_vertical"
android:id="@+id/iv"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center_vertical"
android:textColor="#FFF"
/>
</LinearLayout>
</LinearLayout>
弹出Toast代码:
new CustomToast().ToastShow(MainActivity.this, (ViewGroup)findViewById(R.id.toast_layout_root);
自定义已基本完成。但是这样每次用Toast,都要新建对象,我们修改下:
package com.example.myapplication;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by Administrator on 2016/7/22.
*/
public class CustomToast {
private Toast toast;
public static CustomToast customToast ;
private CustomToast(){
}
public static CustomToast getInstance()
{
if(customToast == null)
{
customToast = new CustomToast ();
}
return customToast ;
}
/**
* 显示Toast
* @param context
* @param root
* @param tvString
*/
public void ToastShow(Context context, ViewGroup root, String tvString){
//加载Toast布局
View layout = LayoutInflater.from(context).inflate(R.layout.activity_toast,root,false);
TextView text = (TextView) layout.findViewById(R.id.text);
ImageView mImageView = (ImageView) layout.findViewById(R.id.iv);
mImageView.setBackgroundResource(R.mipmap.break_heart);
text.setText(tvString);
//text.setTextColor(R.color.aqua);
toast = new Toast(context);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
//设到Toast里
toast.setView(layout);
toast.show();
}
}
ok了。