package com.liuxuyang.myapplication.base; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Handler; import android.text.TextUtils; import android.view.View; import android.widget.Toast; /** * 包含 获取上下文 加载布局 dp px转换 等一些关于界面的工具方法 * @data: 2015-7-27 下午1:35:57 * */ public class UIUtils { private static Toast mToast; private static Handler mHandler = new Handler(); private static Runnable r = new Runnable() { public void run() { mToast.cancel(); mToast=null;//toast隐藏后,将其置为null } }; /** * 当前是否为DEBUG模式 */ public static final boolean DEBUG = true; /** * 全局上下文 */ public static MyApplication getContext() { return MyApplication.application; } /** * 弹出测试Toast * * @param str */ public static void showTestToast(String str) { if (DEBUG) { Toast.makeText(getContext(), str, Toast.LENGTH_SHORT).show(); } } /** * 获取颜色选择器 */ public static ColorStateList getColorStateList(int resId) { return getContext().getResources().getColorStateList(resId); } /** * 展示Toast * * @param str */ public static void showToast(String str) { mHandler.removeCallbacks(r); if (mToast == null) { mToast = Toast.makeText(getContext(), str, Toast.LENGTH_SHORT); } mHandler.postDelayed(r, 1000); mToast.show(); // Toast.makeText(getContext(), str, Toast.LENGTH_SHORT).show(); } /** * 全局Handler 消息处理器 */ public static Handler getHandler() { return MyApplication.getHandler(); } public static boolean isRunOnMainThread() { return android.os.Process.myTid() == getMainThreadTid(); } private static int getMainThreadTid() { return MyApplication.getMainThreadId(); } /** * 在主线程中执行代码 * * @param runnable */ public static void runOnUiThread(Runnable runnable) { // 判断当前是否在主线程中 if (isRunOnMainThread()) { // 执行代码 runnable.run(); } else { post(runnable); } } /** * 获取文字数组 */ public static String[] getStringArray(int resId) { return getResources().getStringArray(resId); } /** * 获取资源 */ public static Resources getResources() { return getContext().getResources(); } public static void post(Runnable runnable) { Handler handler = getHandler(); handler.post(runnable); } /** * 从主线程looper里面移除runnable */ public static void removeCallbacks(Runnable runnable) { getHandler().removeCallbacks(runnable); } /** * 延时在主线程执行runnable */ public static boolean postDelayed(Runnable runnable, long delayMillis) { return getHandler().postDelayed(runnable, delayMillis); } /** * dip转换px */ public static int dip2px(int dip) { final float scale = getContext().getResources().getDisplayMetrics().density; return (int) (dip * scale + 0.5f); } /** * pxz转换dip */ public static int px2dip(int px) { final float scale = getContext().getResources().getDisplayMetrics().density; return (int) (px / scale + 0.5f); } /** * 加载图片 */ public static Drawable getDrawable(int drawableForegroudResId) { return UIUtils.getContext().getResources() .getDrawable(drawableForegroudResId); } /** * 创建布局 */ public static View inflate(int id) { return View.inflate(getContext(), id, null); } /** * 如果才有UIUtils.getContext上下文 可能一些特效看不到 * 创建布局 */ public static View inflate(Context context, int id) { return View.inflate(context, id, null); } /** * 获取 颜色 * * @param i * @return */ public static int getColor(int i) { return getContext().getResources().getColor(i); } /** * 将图片资源转化为可显示在TextView等周围的Drawable对象 * * @param imgId * @return */ public static Drawable getRoundDrawable(int imgId) { Drawable drawable = getResources().getDrawable(imgId); if (drawable != null) drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); return drawable; } /** * 验证手机格式 */ public static boolean isMobileNO(String mobiles) { String telRegex = "[1]\\d{10}";//"[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。 if (TextUtils.isEmpty(mobiles)) return false; else return mobiles.matches(telRegex); } /** * 验证密码是否包含数字和字母 */ public static boolean isLetterDigit(String str) { boolean isDigit = false;//定义一个boolean值,用来表示是否包含数字 boolean isLetter = false;//定义一个boolean值,用来表示是否包含字母 for (int i = 0; i < str.length(); i++) { if (Character.isDigit(str.charAt(i))) { //用char包装类中的判断数字的方法判断每一个字符 isDigit = true; } if (Character.isLetter(str.charAt(i))) { //用char包装类中的判断字母的方法判断每一个字符 isLetter = true; } } String regex = "^[a-zA-Z0-9]+$"; boolean isRight = isDigit && isLetter && str.matches(regex); return isRight; } }