为您推荐:
精华内容
最热下载
问答
  • 66KB weixin_38661236 2021-01-05 00:17:47
  • 27KB weixin_38592502 2020-08-30 21:24:05
  • 5星
    942KB a101307046 2013-12-05 15:56:00
  • 2.72MB weixin_39841882 2019-08-13 02:18:40
  • 2KB qq_44720366 2020-04-14 17:42:34
  • 1KB weixin_37160260 2018-04-15 15:33:36
  • 1KB zxzxzxy1985 2015-02-15 17:22:19
  • 31KB weixin_38735790 2021-01-21 19:54:16
  • 147KB miaojunking 2015-05-01 18:26:52
  • 释放双眼,带上耳机,听听看~!import android.content.Context;import android.view.ViewGroup;.../*** Toast统一管理**/public class ToastUtils{private ViewGroup.LayoutParams layoutParams;private To...

    释放双眼,带上耳机,听听看~!

    import android.content.Context;

    import android.view.ViewGroup;

    import android.widget.Toast;

    /**

    * Toast统一管理类

    *

    */

    public class ToastUtils

    {

    private ViewGroup.LayoutParams layoutParams;

    private ToastUtils()

    {

    /* cannot be instantiated */

    throw new UnsupportedOperationException("cannot be instantiated");

    }

    public static boolean isShow = true;

    /**

    * 短时间显示Toast

    *

    * @param context

    * @param message

    */

    public static void showShort(Context context, CharSequence message)

    {

    if (isShow)

    Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

    }

    /**

    * 短时间显示Toast

    *

    * @param context

    * @param message

    */

    public static void showShort(Context context, int message)

    {

    if (isShow)

    Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

    }

    /**

    * 长时间显示Toast

    *

    * @param context

    * @param message

    */

    public static void showLong(Context context, CharSequence message)

    {

    if (isShow)

    Toast.makeText(context, message, Toast.LENGTH_LONG).show();

    }

    /**

    * 长时间显示Toast

    *

    * @param context

    * @param message

    */

    public static void showLong(Context context, int message)

    {

    if (isShow)

    Toast.makeText(context, message, Toast.LENGTH_LONG).show();

    }

    /**

    * 自定义显示Toast时间

    *

    * @param context

    * @param message

    * @param duration

    */

    public static void show(Context context, CharSequence message, int duration)

    {

    if (isShow)

    Toast.makeText(context, message, duration).show();

    }

    /**

    * 自定义显示Toast时间

    *

    * @param context

    * @param message

    * @param duration

    */

    public static void show(Context context, int message, int duration)

    {

    if (isShow)

    Toast.makeText(context, message, duration).show();

    }

    }

    展开全文
    weixin_34323587 2021-05-27 04:21:21
  • import android.widget.Toast; public class ToastUtil { private static Toast toast;//实现不管我们触发多少次Toast调用,都只会持续一次Toast显示的时长 /** * 短时间显示Toast【居下】 *...
    
    
    import android.view.Gravity;
    import android.widget.Toast;
    
    
    
    
    
    
    public class ToastUtil {
    
        private static Toast toast;//实现不管我们触发多少次Toast调用,都只会持续一次Toast显示的时长
    
        /**
         * 短时间显示Toast【居下】
         * @param msg 显示的内容-字符串*/
        public static void showShortToast(String msg) {
            if(ApplicationController.getInstance() != null){
                if (toast == null) {
                    toast = Toast.makeText(ApplicationController.getInstance(), msg, Toast.LENGTH_SHORT);
                } else {
                    toast.setText(msg);
                }
                toast.show();
            }
        }
        /**
         * 短时间显示Toast【居中】
         * @param msg 显示的内容-字符串*/
        public static void showShortToastCenter(String msg){
            if(ApplicationController.getInstance() != null) {
                if (toast == null) {
                    toast = Toast.makeText(ApplicationController.getInstance(), msg, Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                } else {
                    toast.setText(msg);
                }
                toast.show();
            }
        }
    
        /**
         * 短时间显示Toast【居上】
         * @param msg 显示的内容-字符串*/
        public static void showShortToastTop(String msg){
            if(ApplicationController.getInstance() != null) {
                if (toast == null) {
                    toast = Toast.makeText(ApplicationController.getInstance(), msg, Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.TOP, 0, 0);
                } else {
                    toast.setText(msg);
                }
                toast.show();
            }
        }
    
        /**
         * 长时间显示Toast【居下】
         * @param msg 显示的内容-字符串*/
        public static void showLongToast(String msg) {
            if(ApplicationController.getInstance() != null) {
                if (toast == null) {
                    toast = Toast.makeText(ApplicationController.getInstance(), msg, Toast.LENGTH_LONG);
                } else {
                    toast.setText(msg);
                }
                toast.show();
            }
        }
        /**
         * 长时间显示Toast【居中】
         * @param msg 显示的内容-字符串*/
        public static void showLongToastCenter(String msg){
            if(ApplicationController.getInstance() != null) {
                if (toast == null) {
                    toast = Toast.makeText(ApplicationController.getInstance(), msg, Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                } else {
                    toast.setText(msg);
                }
                toast.show();
            }
        }
        /**
         * 长时间显示Toast【居上】
         * @param msg 显示的内容-字符串*/
        public static void showLongToastTop(String msg){
            if(ApplicationController.getInstance() != null) {
                if (toast == null) {
                    toast = Toast.makeText(ApplicationController.getInstance(), msg, Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.TOP, 0, 0);
                } else {
                    toast.setText(msg);
                }
                toast.show();
            }
        }
    }

     

    展开全文
    qq_41334474 2019-03-07 15:14:27
  • 700KB weixin_39840914 2019-07-29 16:20:10
  • 1KB shunji2099 2017-04-13 22:16:03
  • 大家好,Toast这个提示框大家都晓得,显示一段时间后自动消失,不能获得焦点。但是在使用中有些问题: 1)需要弹出一个新的Toast时,上一个...下面封装了一个工具类,帮助大家管理Toast,基本上可以满足常用的需求,如果

    大家好,Toast这个提示框大家都晓得,显示一段时间后自动消失,不能获得焦点。但是在使用中有些问题:

    1)需要弹出一个新的Toast时,上一个Toast还没有显示完

    2)可能重复弹出相同的信息

    3)Toast具体有哪些用法不是很熟悉,用到时导出去找

    4)app退出去了,Toast还在弹

    等等一系列问题


    下面封装了一个工具类,帮助大家管理Toast,基本上可以满足常用的需求,如果还满足不了,那就自定义了,呵呵~

    import android.content.Context;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    
    /**
     * Created by wangwentao on 2017/1/25.
     * Toast统一管理类
     */
    
    public class ToastUtil {
        private static boolean isShow = true;//默认显示
        private static  Toast mToast = null;//全局唯一的Toast
    
        /*private控制不应该被实例化*/
        private ToastUtil() {
            throw new UnsupportedOperationException("不能被实例化");
        }
    
        /**
         * 全局控制是否显示Toast
         * @param isShowToast
         */
        public static void controlShow(boolean isShowToast){
            isShow = isShowToast;
        }
    
        /**
         * 取消Toast显示
         */
        public void cancelToast() {
            if(isShow && mToast != null){
                mToast.cancel();
            }
        }
    
        /**
         * 短时间显示Toast
         *
         * @param context
         * @param message
         */
        public static void showShort(Context context, CharSequence message) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
                } else {
                    mToast.setText(message);
                }
                mToast.show();
            }
        }
    
        /**
         * 短时间显示Toast
         *
         * @param context
         * @param resId 资源ID:getResources().getString(R.string.xxxxxx);
         */
        public static void showShort(Context context, int resId) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, resId, Toast.LENGTH_SHORT);
                } else {
                    mToast.setText(resId);
                }
                mToast.show();
            }
        }
    
        /**
         * 长时间显示Toast
         *
         * @param context
         * @param message
         */
        public static void showLong(Context context, CharSequence message) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);
                } else {
                    mToast.setText(message);
                }
                mToast.show();
            }
        }
    
        /**
         * 长时间显示Toast
         *
         * @param context
         * @param resId 资源ID:getResources().getString(R.string.xxxxxx);
         */
        public static void showLong(Context context, int resId) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, resId, Toast.LENGTH_LONG);
                } else {
                    mToast.setText(resId);
                }
                mToast.show();
            }
        }
    
        /**
         * 自定义显示Toast时间
         *
         * @param context
         * @param message
         * @param duration 单位:毫秒
         */
        public static void show(Context context, CharSequence message, int duration) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, message, duration);
                } else {
                    mToast.setText(message);
                }
                mToast.show();
            }
        }
    
        /**
         * 自定义显示Toast时间
         *
         * @param context
         * @param resId 资源ID:getResources().getString(R.string.xxxxxx);
         * @param duration 单位:毫秒
         */
        public static void show(Context context, int resId, int duration) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, resId, duration);
                } else {
                    mToast.setText(resId);
                }
                mToast.show();
            }
        }
    
        /**
         * 自定义Toast的View
         * @param context
         * @param message
         * @param duration 单位:毫秒
         * @param view 显示自己的View
         */
        public static void customToastView(Context context, CharSequence message, int duration,View view) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, message, duration);
                } else {
                    mToast.setText(message);
                }
                if(view != null){
                    mToast.setView(view);
                }
                mToast.show();
            }
        }
    
        /**
         * 自定义Toast的位置
         * @param context
         * @param message
         * @param duration 单位:毫秒
         * @param gravity
         * @param xOffset
         * @param yOffset
         */
        public static void customToastGravity(Context context, CharSequence message, int duration,int gravity, int xOffset, int yOffset) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, message, duration);
                } else {
                    mToast.setText(message);
                }
                mToast.setGravity(gravity, xOffset, yOffset);
                mToast.show();
            }
        }
    
        /**
         * 自定义带图片和文字的Toast,最终的效果就是上面是图片,下面是文字
         * @param context
         * @param message
         * @param iconResId 图片的资源id,如:R.drawable.icon
         * @param duration
         * @param gravity
         * @param xOffset
         * @param yOffset
         */
        public static void showToastWithImageAndText(Context context, CharSequence message, int iconResId,int duration,int gravity, int xOffset, int yOffset) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, message, duration);
                } else {
                    mToast.setText(message);
                }
                mToast.setGravity(gravity, xOffset, yOffset);
                LinearLayout toastView = (LinearLayout) mToast.getView();
                ImageView imageView = new ImageView(context);
                imageView.setImageResource(iconResId);
                toastView.addView(imageView, 0);
                mToast.show();
            }
        }
    
        /**
         * 自定义Toast,针对类型CharSequence
         * @param context
         * @param message
         * @param duration
         * @param view
         * @param isGravity true,表示后面的三个布局参数生效,false,表示不生效
         * @param gravity
         * @param xOffset
         * @param yOffset
         * @param isMargin true,表示后面的两个参数生效,false,表示不生效
         * @param horizontalMargin
         * @param verticalMargin
         */
        public static void customToastAll(Context context, CharSequence message, int duration,View view,boolean isGravity,int gravity, int xOffset, int yOffset,boolean isMargin,float horizontalMargin, float verticalMargin) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, message, duration);
                } else {
                    mToast.setText(message);
                }
                if(view != null){
                    mToast.setView(view);
                }
                if(isMargin){
                    mToast.setMargin(horizontalMargin, verticalMargin);
                }
                if(isGravity){
                    mToast.setGravity(gravity, xOffset, yOffset);
                }
                mToast.show();
            }
        }
    
        /**
         * 自定义Toast,针对类型resId
         * @param context
         * @param resId
         * @param duration
         * @param view :应该是一个布局,布局中包含了自己设置好的内容
         * @param isGravity true,表示后面的三个布局参数生效,false,表示不生效
         * @param gravity
         * @param xOffset
         * @param yOffset
         * @param isMargin true,表示后面的两个参数生效,false,表示不生效
         * @param horizontalMargin
         * @param verticalMargin
         */
        public static void customToastAll(Context context, int resId, int duration,View view,boolean isGravity,int gravity, int xOffset, int yOffset,boolean isMargin,float horizontalMargin, float verticalMargin) {
            if (isShow){
                if (mToast == null) {
                    mToast = Toast.makeText(context, resId, duration);
                } else {
                    mToast.setText(resId);
                }
                if(view != null){
                    mToast.setView(view);
                }
                if(isMargin){
                    mToast.setMargin(horizontalMargin, verticalMargin);
                }
                if(isGravity){
                    mToast.setGravity(gravity, xOffset, yOffset);
                }
                mToast.show();
            }
        }
    }
    

    最后告诉大家点小秘密:

    1)Toast底层使用handler机制,分别post一个nShow和一个mHide来控制Toast显示还是隐藏

    2)Toast的视图是通过WindowManager的addView来加载的

    3)先通过makeText()实例化出一个Toast,然后调用toast.Show()方法,这时并不会马上显示Toast,而是会实例化一个TN变量,然后通过service.enqueueToast()将其加到服务队列里面去等待显示。在TN中进行调控Toast的显示格式以及里面的hide()、show()方法来控制Toast的出现以及消失,强调一下的是这个队列是系统维护的,我们并不能干涉。

    4)我们常传的时间参数LONG_DELAY和SHORT_DELAY具体时间分别是:3.5秒和2秒

    5)如果我们自己也想实现类似Toast效果怎么办?

    可以使用windowManager添加view的方式实现自己想要的效果

    好了,就到这里了!!!



    展开全文
    wwt831208 2017-01-25 15:57:00
  • 7.18MB weixin_39841856 2019-08-13 02:08:44
  • 简单粗暴,先看效果: 首先贴上工具类的代码:

    简单粗暴,先看效果

    首先贴上工具类的代码:

    /**
     * 通用(主、子线程)的自定义Toast
     */
    public class ToastUtil {
     
        private static final String TAG = "ToastUtil";
        private static Toast toast;
     
     
        //如果只想在主线程中弹出自定义toast,则直接调用此方法即可
        public static void showToast(Context context, String titles, String messages) {
            toastProcess(context, titles, messages);
        }
     
        //如果想在子线程中和子线程中都能使用,则调用此方法即可(前提是在Activity中,因为runOnUiThread属于Activity中的方法)
        public static void showToast1(final Activity context, final String titles, final String messages) {
            if ("main".equals(Thread.currentThread().getName())) {
                toastProcess(context, titles, messages);
            } else {
                context.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        toastProcess(context, titles, messages);
                    }
                });
            }
        }
     
        /**
         * 自定义toast
         *
         * @param context  上下文对象
         * @param titles   toast 标题
         * @param messages toast内容
         */
        private static void toastProcess(Context context, String titles, String messages) {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert layoutInflater != null;
            View view = layoutInflater.inflate(R.layout.custom_toast, null);
            ImageView bg = view.findViewById(R.id.toast_bg);
            TextView title = view.findViewById(R.id.toast_title);
            TextView text = view.findViewById(R.id.toast_content);
     
            bg.setImageResource(R.mipmap.toast_bg);//toast背景
            title.setText(titles); //toast的标题
            text.setText(messages); //toast内容
            if (toast == null) {
                toast = new Toast(context.getApplicationContext());
            }
            toast.setGravity(Gravity.CENTER, 12, 20);//setGravity用来设置Toast显示的位置,相当于xml中的android:gravity或android:layout_gravity
            toast.setDuration(Toast.LENGTH_LONG);//setDuration方法:设置持续时间,以毫秒为单位。该方法是设置补间动画时间长度的主要方法
            toast.setView(view); //添加视图文件
            toast.show();
        }
     
    }
    

    上述代码中封装了2个toast方法,注释上已经很明白了。

     

    关注2个重点:

    (1).自定义toast

    (2).可在子线程中使用

     

    (1).自定义toast

    上述代码展示了自定义toast的代码逻辑(做了封装toastProcess(....)),下面讲toast的自定义布局也贴出来,custom_toast.xml

    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toast_root"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
     
        <TextView
            android:id="@+id/toast_title"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:background="@android:color/darker_gray"
            android:text="这是一个toast"
            android:textSize="12sp" />
     
        <RelativeLayout
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_below="@+id/toast_title">
     
            <ImageView
                android:id="@+id/toast_bg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@mipmap/toast_bg" />
     
            <TextView
                android:id="@+id/toast_content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:text="我就是那个toast"
                android:textColor="@android:color/background_dark"
                android:textSize="12sp" />
     
        </RelativeLayout>
     
    </RelativeLayout>
    

    (2).可在子线程中使用

    这个也没啥好讲的,代码已经体现出来了。首先 通过Thread.currentThread().getName()方法获取当前线程的线程名称,如果等于"main"的话,则说明在主线程,否则在子线程。这里需要注意的是,所谓的子线程通用,其实也是有限制条件的,那就是传入的上下文对象必须是Activity,因为context.runOnUiThread()方法的context只能在其是Activity中才能使用。这里暂时不考虑service中弹出toast的情况,毕竟toast也是属于用户交互的一种,service主要用于不直接与用户交互的后台,使用toast的情况并不常见。。。

    除此之外,我想说的是,如果不作为toast通用工具类来讲的话,完全可以只在ToastUtil中实现自定义toast的部分,而在主程序中通过handler来实现线程间通信,最后只要保证在ui线程中调用ToastUtil.showToast(...)方法即可。

    贴出最初的MainActivity.java代码:
     

    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private static final String TAG = "MainActivity";
     
        private Button customToast;
        private Button threadCustomToast;
        private static MyHandler myHandler;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            customToast = findViewById(R.id.custom_toast);
            threadCustomToast = findViewById(R.id.thread_custom_toast);
            customToast.setOnClickListener(this);
            threadCustomToast.setOnClickListener(this);
        }
     
     
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.custom_toast:
                    ToastUtil.showToast(MainActivity.this, "这是一个toast", "我就是那个toast");
                    break;
                case R.id.thread_custom_toast:
                    myHandler = new MyHandler(this);
                    myHandler.post(myRunnable);
                    break;
                default:
                    break;
            }
        }
     
        @Override
        protected void onDestroy() {
            super.onDestroy();
            myHandler.removeCallbacks(myRunnable);
            myHandler = null;
        }
     
        //******************************************************
     
        /**
         * 创建静态内部类
         */
        private static class MyHandler extends Handler {
            //持有弱引用HandlerActivity,GC回收时会被回收掉.
            private final WeakReference<MainActivity> mActivty;
     
            MyHandler(MainActivity activity) {
                mActivty = new WeakReference<>(activity);
            }
     
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case 0x01:
                        MainActivity activity = mActivty.get();
                        if (activity != null) {
                            //执行业务逻辑
                            String text = (String) msg.obj;
                            ToastUtil.showToast(activity, "这是一个toast", text);
                        }
                        break;
                    default:
                        break;
                }
     
            }
        }
     
        private Runnable myRunnable = new Runnable() {
            @Override
            public void run() {
                //线程中无法使用Toast,需要将Toast发送至主线程中才能使用
                Message msg = new Message();
                msg.what = 0x01;
                msg.obj = "这是线程的toast";
                myHandler.sendMessage(msg);
            }
        };
     
    }
    

    上述代码,仅供读者参考吧,毕竟如果存在多个不同的子线程的话,如此操作还是比较繁琐的,不如工具类来的方便啊。

     

     

     

     

    展开全文
    qq_15059163 2021-06-02 14:20:50
  • thirteenmonth 2019-01-03 09:28:02
  • weixin_37160260 2018-04-15 14:25:23
  • 3KB u010649761 2019-01-15 08:38:23

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,716
精华内容 11,886
关键字:

toast工具类