博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目开发必备,常用工具类
阅读量:6195 次
发布时间:2019-06-21

本文共 18238 字,大约阅读时间需要 60 分钟。

在之前的 Android 开发过程中,总结了许多的工具类,像类似的工具类其实有很多,这里罗列出一些自己常用到的。其中有些是别人写的,有些是自己总结的,抱歉,有些我实在找不到谁才是原创,下面这些工具类当中,有单位换算 (DensityUtils),屏幕宽高获取(ScreenUtils),新式吐司交互类(SnackbarUtil),SharedPreferences 持久化常用方法的封装(SPUtils),状态栏的设置(StatusBarUtil),日志工具类(LogUtils),Toast 封装(ToastUtils),这里面的大多数自己都用过,谁用谁知道!

DensityUtils.java

public class DensityUtils {       //利用 Android 自带 API     public static int dp2px(Context context, float dpVal){              return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpVal, context.getResources().getDisplayMetrics());          }    	 public float dp2px(float dp) {	        final float scale = getResources().getDisplayMetrics().density;	        return dp * scale + 0.5f;	    }       	    //利用 Android 自带 API        public static int sp2px(Context context, float spVal){              return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, context.getResources().getDisplayMetrics());          }  	   public float sp2px(float sp) {	        final float scale = getResources().getDisplayMetrics().scaledDensity;	        return sp * scale;	    }       //利用 Android 自带 API px converteTo dp        public static float px2dp(Context context, float pxVal) {              final float scale = context.getResources().getDisplayMetrics().density;              return (pxVal / scale);          }         //利用 Android 自带 API px converteTo sp        public static float px2sp(Context context, float pxVal) {              return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);          }    }复制代码

项目中经常要用到 单位转换,这个可以说是必备的

SPUtils.java

public class SPUtils {	public static final String PREF_NMAE = "config";	public static boolean getBoolan(Context context, String key, boolean defaultVal) {		SharedPreferences sp = context.getSharedPreferences(PREF_NMAE, Context.MODE_PRIVATE);		return sp.getBoolean(key, defaultVal);	}	public static void setBoolean(Context context, String key, boolean defaultVal) {		SharedPreferences sp = context.getSharedPreferences(PREF_NMAE, Context.MODE_PRIVATE);		sp.edit().putBoolean(key, defaultVal).commit();	}	public static String getString(Context context, String key, String defaultVal) {		SharedPreferences sp = context.getSharedPreferences(PREF_NMAE, Context.MODE_PRIVATE);		return sp.getString(key, defaultVal);	}	public static void setString(Context context, String key, String defaultVal) {		SharedPreferences sp = context.getSharedPreferences(PREF_NMAE, Context.MODE_PRIVATE);		sp.edit().putString(key, defaultVal).commit();	}}复制代码

ToastUtils.java

public class ToastUtils {	public static Toast mToast;	//单例的吐司	public static void singleTanceToast(Context context,String msg){		if (mToast == null) {			mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);		}		mToast.setText(msg);		mToast.show();	}	//短显示toast	public static void shortShowToast(Context context,String message){		if (mToast == null){			mToast = Toast.makeText(context,message,Toast.LENGTH_SHORT);		}		mToast.show();	}	//长显示toast	public static void longShowToast(Context context, String message) {		if (mToast == null) {			mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);		}		mToast.show();	}	//自定义时长显示toast	public static void customShowToast(Context context,String message,int duration){		if (mToast == null){			mToast = Toast.makeText(context,message,Toast.LENGTH_LONG);		}		mToast.setDuration(duration);		mToast.show();	}	/*	* 带图片的吐司	* backgroud 图片id	* msg 显示的字符	* mContext 上下文	*/	public static void showToastWithImage(Context mContext, int background, String msg) {		if (mToast == null) {			//mToast = Toast.makeText(mContext, "", Toast.LENGTH_SHORT);			mToast = new Toast(mContext);		}		LinearLayout mLinearLayout = new LinearLayout(mContext);		TextView mTextView = new TextView(mContext);		mTextView.setText(msg);		mTextView.setGravity(Gravity.CENTER_VERTICAL);// 设置文字居中		mTextView.setTextSize(16);		mTextView.setTextColor(Color.WHITE);// 字体大小和颜色		mTextView.setCompoundDrawablesWithIntrinsicBounds(background, 0, 0, 0);		mLinearLayout.setBackgroundResource(android.R.drawable.toast_frame);//Android自带的背景色		mLinearLayout.addView(mTextView);		mToast.setView(mLinearLayout);		mToast.setGravity(Gravity.CENTER, 0, 0);		mToast.show();	}}复制代码

LogUtils.java

public class LogUtils {	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 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);		}	}}复制代码

这个不错,记得在郭神的书里面有介绍

StatusBarUtil.java

public class StatusBarUtil {    /**     * 修改状态栏为全透明     * @param activity     */    @TargetApi(19)    public static void transparencyBar(Activity activity) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = activity.getWindow();            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.setStatusBarColor(Color.TRANSPARENT);            window.setNavigationBarColor(Color.TRANSPARENT);        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            Window window = activity.getWindow();            window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);        }    }    /**     * 修改状态栏颜色,支持4.4以上版本     * @param activity     * @param colorId     */    public static void setStatusBarColor(Activity activity, int colorId) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = activity.getWindow();//      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.setStatusBarColor(activity.getResources().getColor(colorId));        }    }    /**     * 设置状态栏黑色字体图标,     * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android     *     * @param activity     * @return 1:MIUUI 2:Flyme 3:android6.0     */    public static int StatusBarLightMode(Activity activity) {        int result = 0;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            if (MIUISetStatusBarLightMode(activity.getWindow(), true)) {                result = 1;            } else if (FlymeSetStatusBarLightMode(activity.getWindow(), true)) {                result = 2;            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);                result = 3;            }        }        return result;    }    /**     * 已知系统类型时,设置状态栏黑色字体图标。     * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android     * @param activity     * @param type     1:MIUUI 2:Flyme 3:android6.0     */    public static void StatusBarLightMode(Activity activity, int type) {        if (type == 1) {            MIUISetStatusBarLightMode(activity.getWindow(), true);        } else if (type == 2) {            FlymeSetStatusBarLightMode(activity.getWindow(), true);        } else if (type == 3) {            activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);        }    }    /**     * 清除MIUI或flyme或6.0以上版本状态栏黑色字体     */    public static void StatusBarDarkMode(Activity activity, int type) {        if (type == 1) {            MIUISetStatusBarLightMode(activity.getWindow(), false);        } else if (type == 2) {            FlymeSetStatusBarLightMode(activity.getWindow(), false);        } else if (type == 3) {            activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);        }    }    /**     * 设置状态栏图标为深色和魅族特定的文字风格     * 可以用来判断是否为Flyme用户     * @param window 需要设置的窗口     * @param dark   是否把状态栏字体及图标颜色设置为深色     * @return boolean 成功执行返回true     */    public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {        boolean result = false;        if (window != null) {            try {                WindowManager.LayoutParams lp = window.getAttributes();                Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");                Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");                darkFlag.setAccessible(true);                meizuFlags.setAccessible(true);                int bit = darkFlag.getInt(null);                int value = meizuFlags.getInt(lp);                if (dark) {                    value |= bit;                } else {                    value &= ~bit;                }                meizuFlags.setInt(lp, value);                window.setAttributes(lp);                result = true;            } catch (Exception e) {				e.printStack();            }        }        return result;    }    /**     * 设置状态栏字体图标为深色,需要MIUIV6以上     * @param window 需要设置的窗口     * @param dark   是否把状态栏字体及图标颜色设置为深色     * @return boolean 成功执行返回true     */    public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {        boolean result = false;        if (window != null) {            Class clazz = window.getClass();            try {                int darkModeFlag = 0;                Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");                Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");                darkModeFlag = field.getInt(layoutParams);                Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);                if (dark) {                    extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体                } else {                    extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体                }                result = true;            } catch (Exception e) {            }        }        return result;    }}复制代码

SnackbarUtil.java

public class SnackbarUtil {    public static final   int Info = 1;    public static final  int Confirm = 2;    public static final  int Warning = 3;    public static final  int Alert = 4;    public static  int red = 0xfff44336;    public static  int green = 0xff4caf50;    public static  int blue = 0xff2195f3;    public static  int orange = 0xffffc107;    /**     * 短显示Snackbar,自定义颜色     * @param view     * @param message     * @param messageColor     * @param backgroundColor     * @return     */    public static Snackbar ShortSnackbar(View view, String message, int messageColor, int backgroundColor){        Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_SHORT);        setSnackbarColor(snackbar,messageColor,backgroundColor);        return snackbar;    }    /**     * 长显示Snackbar,自定义颜色     * @param view     * @param message     * @param messageColor     * @param backgroundColor     * @return     */    public static Snackbar LongSnackbar(View view, String message, int messageColor, int backgroundColor){        Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_LONG);        setSnackbarColor(snackbar,messageColor,backgroundColor);        return snackbar;    }    /**     * 自定义Snackbar显示时长,自定义颜色     * @param view     * @param message     * @param messageColor     * @param backgroundColor     * @return     */    public static Snackbar IndefiniteSnackbar(View view, String message, int duration, int messageColor, int backgroundColor){        Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_INDEFINITE).setDuration(duration);        setSnackbarColor(snackbar,messageColor,backgroundColor);        return snackbar;    }    /**     * 短显示Snackbar,可选预设类型     * @param view     * @param message     * @param type     * @return     */    public static Snackbar ShortSnackbar(View view, String message, int type){        Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_SHORT);        switchType(snackbar,type);        return snackbar;    }    /**     * 长显示Snackbar,可选预设类型     * @param view     * @param message     * @param type     * @return     */    public static Snackbar LongSnackbar(View view, String message, int type){        Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_LONG);        switchType(snackbar,type);        return snackbar;    }    /**     * 自定义时常显示Snackbar,可选预设类型     * @param view     * @param message     * @param type     * @return     */    public static Snackbar IndefiniteSnackbar(View view, String message, int duration, int type){        Snackbar snackbar = Snackbar.make(view,message, Snackbar.LENGTH_INDEFINITE).setDuration(duration);        switchType(snackbar,type);        return snackbar;    }    //选择预设类型    private static void switchType(Snackbar snackbar, int type){        switch (type){            case Info:                setSnackbarColor(snackbar,blue);                break;            case Confirm:                setSnackbarColor(snackbar,green);                break;            case Warning:                setSnackbarColor(snackbar,orange);                break;            case Alert:                setSnackbarColor(snackbar, Color.YELLOW,red);                break;        }    }    /**     * 设置Snackbar背景颜色     * @param snackbar     * @param backgroundColor     */    public static void setSnackbarColor(Snackbar snackbar, int backgroundColor) {        View view = snackbar.getView();        if(view!=null){            view.setBackgroundColor(backgroundColor);        }    }    /**     * 设置Snackbar文字和背景颜色     * @param snackbar     * @param messageColor     * @param backgroundColor     */    public static void setSnackbarColor(Snackbar snackbar, int messageColor, int backgroundColor) {        View view = snackbar.getView();        if(view!=null){            view.setBackgroundColor(backgroundColor);            ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(messageColor);        }    }    /**     * 向Snackbar中添加view     * @param snackbar     * @param layoutId     * @param index 新加布局在Snackbar中的位置     */    public static void SnackbarAddView(Snackbar snackbar, int layoutId, int index) {        View snackbarview = snackbar.getView();        Snackbar.SnackbarLayout snackbarLayout=(Snackbar.SnackbarLayout)snackbarview;        View add_view = LayoutInflater.from(snackbarview.getContext()).inflate(layoutId,null);        LinearLayout.LayoutParams p = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);        p.gravity= Gravity.CENTER_VERTICAL;        snackbarLayout.addView(add_view,index,p);    }}复制代码

这个是从一个大神的项目中拿出来的,也挺不错的,现在还没用过 SnackBar 就真说不过去了!

ScreenUtils.java

public class ScreenUtils {        /**      * 获得屏幕高度      * @param context      * @return      */     public static int getScreenWidth(Context context){          WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);          DisplayMetrics outMetrics = new DisplayMetrics();          wm.getDefaultDisplay().getMetrics(outMetrics);          return outMetrics.widthPixels;      }        /**      * 获得屏幕宽度      * @param context      * @return      */     public static int getScreenHeight(Context context) {          WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);          DisplayMetrics outMetrics = new DisplayMetrics();          wm.getDefaultDisplay().getMetrics(outMetrics);          return outMetrics.heightPixels;      }        /**      * 获得状态栏的高度      * @param context      * @return      */     public static int getStatusHeight(Context context){          int statusHeight = -1;          try{              Class
clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString()); statusHeight = context.getResources().getDimensionPixelSize(height); } catch (Exception e) { e.printStackTrace(); } return statusHeight; } /** * 获取当前屏幕截图,包含状态栏 * @param activity * @return */ public static Bitmap snapShotWithStatusBar(Activity activity){ View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); int width = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, 0, width, height); view.destroyDrawingCache(); return bp; } /** * 获取当前屏幕截图,不包含状态栏 * @param activity * @return */ public static Bitmap snapShotWithoutStatusBar(Activity activity){ View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; int width = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return bp; } }复制代码

转载于:https://juejin.im/post/5a45d7ce51882533f01ee2cb

你可能感兴趣的文章
Asp.Net MVC 分页、检索、排序整体实现
查看>>
python 输出当前行号
查看>>
12C -- 配置Application Continuity
查看>>
Redis从入门到精通:初级篇(转)
查看>>
Flymeos插桩适配教程
查看>>
Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询
查看>>
C#的delegate简单练习
查看>>
还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
查看>>
YARN中内存的设置
查看>>
ubuntu使用
查看>>
json 解析豆瓣ApiURL
查看>>
java 基础2
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
GIT学习笔记
查看>>
Flex Box 概念梳理
查看>>
Swift 4.2进入最后开发阶段,为Swift 5铺平道路
查看>>
有关GitHub仓库分支的几个问题
查看>>
如何使用敏捷开发来赢得太阳能竞速赛
查看>>
Node基础:资源压缩之zlib
查看>>