超简单自定义Toast

来源:互联网 发布:盈利宝 知乎 编辑:程序博客网 时间:2024/04/29 02:07

   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了。

0 0
原创粉丝点击