美文网首页程序自定义viewAndroid开发
Android开发常用工具类积累

Android开发常用工具类积累

作者: david_zhw | 来源:发表于2016-09-26 16:28 被阅读4465次

    主要积累一些开发中比较 常用的工具类,部分借鉴于网络,主要来源于平时开发因需求而生的小工具类

    13、ArithUtil

    
    /**
     * Created by Administrator on 2016/10/31.
     */
    
    import java.math.BigDecimal;
    
    /**
     * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
     * 确的浮点数运算,包括加减乘除和四舍五入。
     */
    public class ArithUtil {
        //默认除法运算精度
        private static final int DEF_DIV_SCALE = 10;
        //这个类不能实例化
        private ArithUtil(){
        }
    
        /**
         * 提供精确的加法运算。
         * @param v1 被加数
         * @param v2 加数
         * @return 两个参数的和
         */
        public static double add(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.add(b2).doubleValue();
        }
        /**
         * 提供精确的减法运算。
         * @param v1 被减数
         * @param v2 减数
         * @return 两个参数的差
         */
        public static double sub(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.subtract(b2).doubleValue();
        }
        /**
         * 提供精确的乘法运算。
         * @param v1 被乘数
         * @param v2 乘数
         * @return 两个参数的积
         */
        public static double mul(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.multiply(b2).doubleValue();
        }
    
        /**
         * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
         * 小数点以后10位,以后的数字四舍五入。
         * @param v1 被除数
         * @param v2 除数
         * @return 两个参数的商
         */
        public static double div(double v1,double v2){
            return div(v1,v2,DEF_DIV_SCALE);
        }
    
        /**
         * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
         * 定精度,以后的数字四舍五入。
         * @param v1 被除数
         * @param v2 除数
         * @param scale 表示表示需要精确到小数点以后几位。
         * @return 两个参数的商
         */
        public static double div(double v1,double v2,int scale){
            if(scale<0){
                throw new IllegalArgumentException(
                        "The scale must be a positive integer or zero");
            }
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    
        /**
         * 提供精确的小数位四舍五入处理。
         * @param v 需要四舍五入的数字
         * @param scale 小数点后保留几位
         * @return 四舍五入后的结果
         */
        public static double round(double v,int scale){
            if(scale<0){
                throw new IllegalArgumentException(
                        "The scale must be a positive integer or zero");
            }
            BigDecimal b = new BigDecimal(Double.toString(v));
            BigDecimal one = new BigDecimal("1");
            return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    }
    

    12、NetWorkUtil

    
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.telephony.TelephonyManager;
    import android.text.TextUtils;
    
    /**
     * Created by Administrator on 2016/11/3.
     * 获取手机网络状态,详细到移动网络类型
     */
    
    public class NetWorkUtil {
        /** 没有网络 */
        public static final int NETWORKTYPE_INVALID = 0;
        /** wap网络 */
        public static final int NETWORKTYPE_WAP = 1;
        /** 2G网络 */
        public static final int NETWORKTYPE_2G = 2;
        /** 3G和3G以上网络,或统称为快速网络 */
        public static final int NETWORKTYPE_3G = 3;
        /** wifi网络 */
        public static final int NETWORKTYPE_WIFI = 4;
        private static int mNetWorkType;
    
        /**
         * 获取网络状态,wifi,wap,2g,3g.
         *
         * @param context 上下文
         * @return int 网络状态 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G},          *{@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP}* <p>{@link #NETWORKTYPE_WIFI}
         */
        public static int getNetWorkType(Context context) {
            ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = manager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                String type = networkInfo.getTypeName();
                if (type.equalsIgnoreCase("WIFI")) {
                    mNetWorkType = NETWORKTYPE_WIFI;
                } else if (type.equalsIgnoreCase("MOBILE")) {
                    String proxyHost = android.net.Proxy.getDefaultHost();
                    mNetWorkType = TextUtils.isEmpty(proxyHost)
                            ? (isFastMobileNetwork(context) ? NETWORKTYPE_3G : NETWORKTYPE_2G)
                            : NETWORKTYPE_WAP;
                }
            } else {
                mNetWorkType = NETWORKTYPE_INVALID;
            }
            LogUtil.e("info","mNetWorkType:" + mNetWorkType);
            return mNetWorkType;
        }
    
        /**
         * 通过TelephonyManager判断移动网络的类型
         * @param context
         * @return
         */
        private static boolean isFastMobileNetwork(Context context) {
            TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            switch (telephonyManager.getNetworkType()) {
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                    return false; // ~ 50-100 kbps
                case TelephonyManager.NETWORK_TYPE_CDMA:
                    return false; // ~ 14-64 kbps
                case TelephonyManager.NETWORK_TYPE_EDGE:
                    return false; // ~ 50-100 kbps
                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                    return true; // ~ 400-1000 kbps
                case TelephonyManager.NETWORK_TYPE_EVDO_A:
                    return true; // ~ 600-1400 kbps
                case TelephonyManager.NETWORK_TYPE_GPRS:
                    return false; // ~ 100 kbps
                case TelephonyManager.NETWORK_TYPE_HSDPA:
                    return true; // ~ 2-14 Mbps
                case TelephonyManager.NETWORK_TYPE_HSPA:
                    return true; // ~ 700-1700 kbps
                case TelephonyManager.NETWORK_TYPE_HSUPA:
                    return true; // ~ 1-23 Mbps
                case TelephonyManager.NETWORK_TYPE_UMTS:
                    return true; // ~ 400-7000 kbps
                case TelephonyManager.NETWORK_TYPE_EHRPD:
                    return true; // ~ 1-2 Mbps
                case TelephonyManager.NETWORK_TYPE_EVDO_B:
                    return true; // ~ 5 Mbps
                case TelephonyManager.NETWORK_TYPE_HSPAP:
                    return true; // ~ 10-20 Mbps
                case TelephonyManager.NETWORK_TYPE_IDEN:
                    return false; // ~25 kbps
                case TelephonyManager.NETWORK_TYPE_LTE:
                    return true; // ~ 10+ Mbps
                case TelephonyManager.NETWORK_TYPE_UNKNOWN:
                    return false;
                default:
                    return false;
            }
        }
    }
    

    11、AppVersionUtil

    
    import android.content.Context;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    
    /**
     * Created by david on 2016/10/20.
     */
    
    public class AppVersionUtil {
        /**
         * 获取版本号
         * String
         * @return 当前应用的版本名称
         */
        public static String getVersionName(Context context) {
            try {
                PackageManager manager = context.getPackageManager();
                PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
                String versionName = info.versionName;
                LogUtil.e("info", "versionName" + versionName);
                return versionName;
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
        }
    
        /**
         * 获取版本号
         * int
         * @return 当前应用的版本号
         */
        public static int getVersionCode(Context context) {
            try {
                PackageManager manager = context.getPackageManager();
                PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
                int versionCode = info.versionCode;
                LogUtil.e("info", "versionCode" + versionCode);
                return versionCode;
            } catch (Exception e) {
                e.printStackTrace();
                return 1;
            }
        }
    }
    

    10、JsonAssetsReaderUtil

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    /**
     * Created by david on 2016/11/23.
     * 从Assets文件夹中读取.json文件 输出String
     */
    
    public class JsonAssetsReaderUtil {
    
        public static String getJsonStrFromAssets(Context context, String jsonFileName) {
            InputStreamReader inputStreamReader = null;
            StringBuilder stringBuilder = null;
            BufferedReader bufferedReader = null;
            try {
                inputStreamReader = new InputStreamReader(context.getAssets().open(jsonFileName), "UTF-8");
                bufferedReader = new BufferedReader(inputStreamReader);
                String jsonStr;
                stringBuilder = new StringBuilder();
                while ((jsonStr = bufferedReader.readLine()) != null) {
                    stringBuilder.append(jsonStr);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    inputStreamReader.close();
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return stringBuilder.toString();
        }
    }
    
    

    9、LogUtil

    import android.util.Log;
    
    /**
     * LEVEL = VERBOSE时打印所有调试信息
     * 当项目上线时,改为 LEVEL = NOTHING
     * 关闭所有打印信息
     * @author 81091
     *
     */
    public class LogUtil {
        public static final int VERBOSE = 1;
        public static final int DEBUG = 2;
        public static final int INFO = 3;
        public static final int WARN = 4;
        public static final int ERROR = 5;
        public static final int NOTHING = 6;
        public static final int LEVEL = VERBOSE;//打印所有等级的信息
    //  public static final int LEVEL = NOTHING;//关闭所有等级的信息
        
        public static void v(String tag,String msg){
            if(LEVEL <= VERBOSE){
                Log.v(tag,msg);
            }
        } 
        public static void d(String tag,String msg){
            if(LEVEL <= DEBUG){
                Log.d(tag,msg);
            }
        } 
        public static void i(String tag,String msg){
            if(LEVEL <= INFO){
                Log.i(tag,msg);
            }
        } 
        public static void w(String tag,String msg){
            if(LEVEL <= WARN){
                Log.w(tag,msg);
            }
        } 
        public static void e(String tag,String msg){
            if(LEVEL <= ERROR){
                Log.e(tag,msg);
            }
        } 
    
    }
    
    

    8、MD5Utils

    /**
     * 32位小写
     * Created by C5-0 on 2015/7/25.
     */
    public class MD5Utils {
        public static String ecodeTwice(String str) {//MD5两次
            return ecode(ecode(str));
        }
    
        public static String ecode(String passwd) {
    
            try {
                MessageDigest instance = MessageDigest.getInstance("MD5");
                byte[] digest = instance.digest(passwd.getBytes());
    
                StringBuilder sb = new StringBuilder();
                for (byte b : digest) {
                    int i = b & 0xff;
                    String hexString = Integer.toHexString(i);
                    if (hexString.length() < 2) {
                        hexString = "0" + hexString;
                    }
                    sb.append(hexString);
                }
                return sb.toString();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
    
            return "";
        }
    }
    

    7、比较常用的正则表达式验证

    
    /**
     * Created by Administrator on 2016/8/10.
     */
    public class RegularUtils {
    
        private RegularUtils() {
            throw new UnsupportedOperationException("u can't fuck me...");
        }
    
        /**
         * 验证手机号(简单)
         */
        private static final String REGEX_MOBILE_SIMPLE = "^[1]\\d{10}$";
        /**
         * 验证手机号(精确)
         * <p>
         * <p>移动:134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、188
         * <p>联通:130、131、132、145、155、156、175、176、185、186
         * <p>电信:133、153、173、177、180、181、189
         * <p>全球星:1349
         * <p>虚拟运营商:170
         */
        private static final String REGEX_MOBILE_EXACT = "^((13[0-9])|(14[5,7])|(15[0-3,5-8])|(17[0,3,5-8])|(18[0-9])|(147))\\d{8}$";
        /**
         * 验证座机号,正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx/
         */
        private static final String REGEX_TEL = "^0\\d{2,3}[- ]?\\d{7,8}";
        /**
         * 验证邮箱
         */
        private static final String REGEX_EMAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
        /**
         * 验证url
         */
        private static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?";
        /**
         * 验证汉字
         */
        private static final String REGEX_CHZ = "^[\\u4e00-\\u9fa5]+$";
        /**
         * 验证用户名,取值范围为a-z,A-Z,0-9,"_",汉字,不能以"_"结尾,用户名必须是6-20位
         */
        private static final String REGEX_USERNAME = "^[\\w\\u4e00-\\u9fa5]{6,20}(?<!_)$";
        /**
         * 验证IP地址
         */
        private static final String REGEX_IP = "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";
    
        //If u want more please visit http://toutiao.com/i6231678548520731137/
    
        /**
         * @param string 待验证文本
         * @return 是否符合手机号(简单)格式
         */
        public static boolean isMobileSimple(String string) {
            return isMatch(REGEX_MOBILE_SIMPLE, string);
        }
    
        /**
         * @param string 待验证文本
         * @return 是否符合手机号(精确)格式
         */
        public static boolean isMobileExact(String string) {
            return isMatch(REGEX_MOBILE_EXACT, string);
        }
    
        /**
         * @param string 待验证文本
         * @return 是否符合座机号码格式
         */
        public static boolean isTel(String string) {
            return isMatch(REGEX_TEL, string);
        }
    
        /**
         * @param string 待验证文本
         * @return 是否符合邮箱格式
         */
        public static boolean isEmail(String string) {
            return isMatch(REGEX_EMAIL, string);
        }
    
        /**
         * @param string 待验证文本
         * @return 是否符合网址格式
         */
        public static boolean isURL(String string) {
            return isMatch(REGEX_URL, string);
        }
    
        /**
         * @param string 待验证文本
         * @return 是否符合汉字
         */
        public static boolean isChz(String string) {
            return isMatch(REGEX_CHZ, string);
        }
    
        /**
         * @param string 待验证文本
         * @return 是否符合用户名
         */
        public static boolean isUsername(String string) {
            return isMatch(REGEX_USERNAME, string);
        }
    
        /**
         * @param regex  正则表达式字符串
         * @param string 要匹配的字符串
         * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
         */
        public static boolean isMatch(String regex, String string) {
            return !TextUtils.isEmpty(string) && Pattern.matches(regex, string);
        }
    }
    
    

    6、像素相关,获取Android屏幕宽度,控件宽度,dp跟px互转

    public class PixelUtil {
    
        //获取运行屏幕宽度
        public static int getScreenWidth(Activity context) {
            DisplayMetrics dm = new DisplayMetrics();
            context.getWindowManager().getDefaultDisplay().getMetrics(dm);
            //宽度 dm.widthPixels
            //高度 dm.heightPixels
    //        LogUtil.i("info", "getScreenWidth" + dm.widthPixels);
            return dm.widthPixels;
        }
    
        /**
         * 获取控件宽
         */
        public static int getWidth(View view) {
            int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
            int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
            view.measure(w, h);
            return (view.getMeasuredWidth());
        }
    
    
        //DP转PX
        public static int dp2px(Activity context, float dpValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (dpValue * scale + 0.5f);
        }
    
        //PX转DP
        public static int px2dp(Activity context, float pxValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }
    }
    
    

    5、去除double类型数字尾巴的0

    如:50.00 --> 50
    public class MathDataUtil {
        public static BigDecimal stripTrailingZeros(double d) {//去除double尾巴的0
            return new BigDecimal(d).stripTrailingZeros();
        }
    }
    

    4、时间戳相关

    public class DateUtils {
    
        private static SimpleDateFormat sf;
        private static SimpleDateFormat sdf;
    
        /**
         * 获取系统时间 格式为:"yyyy/MM/dd "
         **/
        public static String getCurrentDate() {
            Date d = new Date();
            sf = new SimpleDateFormat("yyyy年MM月dd日");
            return sf.format(d);
        }
    
        /**
         * 获取系统时间 格式为:"yyyy "
         **/
        public static String getCurrentYear() {
            Date d = new Date();
            sf = new SimpleDateFormat("yyyy");
            return sf.format(d);
        }
    
        /**
         * 获取系统时间 格式为:"MM"
         **/
        public static String getCurrentMonth() {
            Date d = new Date();
            sf = new SimpleDateFormat("MM");
            return sf.format(d);
        }
    
        /**
         * 获取系统时间 格式为:"dd"
         **/
        public static String getCurrentDay() {
            Date d = new Date();
            sf = new SimpleDateFormat("dd");
            return sf.format(d);
        }
    
        /**
         * 获取当前时间戳
         *
         * @return
         */
        public static long getCurrentTime() {
            long d = new Date().getTime() / 1000;
            return d;
        }
    
        /**
         * 时间戳转换成字符窜
         */
        public static String getDateToString(long time) {
            Date d = new Date(time * 1000);
            sf = new SimpleDateFormat("yyyy年MM月dd日");
            return sf.format(d);
        }
    
        /**
         * 时间戳中获取年
         */
        public static String getYearFromTime(long time) {
            Date d = new Date(time * 1000);
            sf = new SimpleDateFormat("yyyy");
            return sf.format(d);
        }
    
        /**
         * 时间戳中获取月
         */
        public static String getMonthFromTime(long time) {
            Date d = new Date(time * 1000);
            sf = new SimpleDateFormat("MM");
            return sf.format(d);
        }
    
        /**
         * 时间戳中获取日
         */
        public static String getDayFromTime(long time) {
            Date d = new Date(time * 1000);
            sf = new SimpleDateFormat("dd");
            return sf.format(d);
        }
    
        /**
         * 将字符串转为时间戳
         */
        public static long getStringToDate(String time) {
            sdf = new SimpleDateFormat("yyyy年MM月dd日");
            Date date = new Date();
            try {
                date = sdf.parse(time);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return date.getTime();
        }
    }
    

    3、文件相关

    public class FileUtils {
    
        public static String SDPATH = Environment.getExternalStorageDirectory() + "/formats/";// 获取文件夹
        // 保存图片
    
        public static boolean saveBitmap(Bitmap mBitmap, String path, String imgName) {
            String sdStatus = Environment.getExternalStorageState();
            if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
                return false;
            }
            FileOutputStream b = null;
            File file = new File(path);
            file.mkdirs();// 创建文件夹
            String fileName = path + imgName;
    //        delFile(path, imgName);//删除本地旧图
            try {
                b = new FileOutputStream(fileName);
                mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                try {
                        b.flush();
                        b.close();
    
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            return true;
        }
    
        public static File createSDDir(String dirName) throws IOException {
            File dir = new File(SDPATH + dirName);
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    
                System.out.println("createSDDir:" + dir.getAbsolutePath());
                System.out.println("createSDDir:" + dir.mkdir());
            }
            return dir;
        }
    
        public static boolean isFileExist(String fileName) {
            File file = new File(SDPATH + fileName);
            file.isFile();
            return file.exists();
        }
    
        // 删除文件
        public static void delFile(String path, String fileName) {
            File file = new File(path + fileName);
            if (file.isFile()) {
                file.delete();
            }
            file.exists();
        }
    
        // 删除文件夹和文件夹里面的文件
        public static void deleteDir() {
            File dir = new File(SDPATH);
            if (dir == null || !dir.exists() || !dir.isDirectory())
                return;
    
            for (File file : dir.listFiles()) {
                if (file.isFile())
                    file.delete(); // 删除所有文件
                else if (file.isDirectory())
                    deleteDir(); // 递规的方式删除文件夹
            }
            dir.delete();// 删除目录本身
        }
    
        public static boolean fileIsExists(String path) {
            try {
                File f = new File(path);
                if (!f.exists()) {
                    return false;
                }
            } catch (Exception e) {
    
                return false;
            }
            return true;
        }
    
    }
    

    2、AlertDialogUtil

    
    /**
     * Created by david on 2016/8/26.
     *
     * 使用观察者模式来实现确定结果回调
     *
     * 调用方式:
     * AlertDialogUtil dialogUtil = new AlertDialogUtil(context);
     * dialogUtil.showDialog("确定删除已上传的图片?");
     * dialogUtil.setDialogPositiveButtonListener(new AlertDialogUtil.DialogPositiveButtonListener() {
     *
     *      @Override
     *     public void setDialogPositiveButtonListener() {
     *
     *    }
     * });
    
     */
    public class AlertDialogUtil {
        public Context context;
        private DialogPositiveButtonListener listener;
    
        public AlertDialogUtil(Context context) {
            this.context = context;
        }
    
        public void showDialog(String message) {
            AlertDialog.Builder dialog = new AlertDialog.Builder(context);
            dialog.setMessage(message);
            dialog.setCancelable(false);//点击框外取消
            dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    if (listener != null) {
                        listener.setDialogPositiveButtonListener();
                    }
                }
    
            });
            dialog.setNegativeButton("取消", null);
            dialog.show();
        }
    
        public void setDialogPositiveButtonListener(DialogPositiveButtonListener listener) {
            this.listener = listener;
        }
    
        public interface DialogPositiveButtonListener {
            void setDialogPositiveButtonListener();
        }
    }
    
    

    1、ToastUtil

    public class ToastUtils {
        static Toast toast;
    
        private ToastUtils() {
            throw new AssertionError();
        }
    
        public static void show(Context paramContext, int paramInt) {
            show(paramContext, paramContext.getResources().getText(paramInt), 0);
        }
    
        public static void show(Context paramContext, int paramInt1, int paramInt2) {
            show(paramContext, paramContext.getResources().getText(paramInt1), paramInt2);
        }
    
        public static void show(Context paramContext, CharSequence paramCharSequence) {
            show(paramContext, paramCharSequence, 0);
        }
    
        public static void show(Context paramContext, CharSequence paramCharSequence, int paramInt) {
            if (toast != null) {
                toast.setText(paramCharSequence);
                toast.setDuration(paramInt);
                toast.show();//
                return;
            }
            toast = Toast.makeText(paramContext, paramCharSequence, paramInt);
            toast.show();
        }
    
        public static void toastCancle() {
            if (toast != null)
                toast.cancel();
        }
    }
    

    相关文章

      网友评论

      本文标题:Android开发常用工具类积累

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