美文网首页
Android 自定义Toast

Android 自定义Toast

作者: GODANDDEVIL | 来源:发表于2020-02-28 16:50 被阅读0次

    1、创建一个drawable资源xml文件,用作toast的背景,命名为:toast_background.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <corners android:radius="15dp"/>
        <solid android:color="@color/colorToastBackground"/>
    </shape>
    

    2、创建一个自定义Toast的layout文件,命名为:toast_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/toast_background">
    
        <TextView
            android:id="@+id/toast_text"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="@color/colorWhite"
            android:padding="20dp"/>
    
    </RelativeLayout>
    

    3、创建一个自定义Toast的类CustomToast继承自Toast

    /**
     * 自定义Toast
     */
    public class CustomToast extends Toast {
        /**
         * Toast单例
         */
        private static CustomToast toast;
        /**
         * 构造方法
         */
        private CustomToast(Context context) {
            super(context);
        }
        /**
         * 隐藏当前Toast
         */
        private static void cancelToast() {
            if (toast != null) {
                toast.cancel();
            }
        }
        public void cancel() {
            try {
                super.cancel();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 重写show方法
         */
        @Override
        public void show() {
            try {
                super.show();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    //    text的类型之所以为int是因为要传入strings.xml里的资源字符串
        private static void initToast(Context context, int text) {
            try {
                cancelToast();
                toast = new CustomToast(context);
                // 获取LayoutInflater对象
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                // 由layout文件创建一个View对象
                View layout = inflater.inflate(R.layout.toast_layout, null);
                // 吐司上的文字
                TextView toast_text = layout.findViewById(R.id.toast_text);
                toast_text.setText(text);
                toast.setView(layout);
                toast.setGravity(Gravity.CENTER, 0, 0);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 显示Toast
         *
         * @param context 上下文
         * @param text    显示的文本
         * @param time    显示时长
         */
        private static void showToast(Context context, int text, int time) {
            // 初始化一个新的Toast对象
            initToast(context, text);
            // 设置显示时长
            if (time == Toast.LENGTH_LONG) {
                toast.setDuration(Toast.LENGTH_LONG);
            } else {
                toast.setDuration(Toast.LENGTH_SHORT);
            }
            // 显示Toast
            toast.show();
        }
        static void showText(Context context, int text, int time) {
            showToast(context, text, time);
        }
    }
    

    使用:CustomToast.showText(context,str,time);

    相关文章

      网友评论

          本文标题:Android 自定义Toast

          本文链接:https://www.haomeiwen.com/subject/wfilhhtx.html