content: package <%= appPackage %>.lifecycle.utils;
  
  import android.app.Activity;
  import android.content.Context;
  import android.content.Intent;
  import android.content.res.Resources;
  import android.graphics.drawable.Drawable;
  import android.os.Message;
  import android.support.design.widget.Snackbar;
  import android.support.v7.widget.DefaultItemAnimator;
  import android.support.v7.widget.RecyclerView;
  import android.text.SpannableString;
  import android.text.Spanned;
  import android.text.SpannedString;
  import android.text.style.AbsoluteSizeSpan;
  import android.view.View;
  import android.view.ViewGroup;
  import android.view.ViewParent;
  import android.view.WindowManager;
  import android.widget.TextView;
  import android.widget.Toast;
  
  import java.security.MessageDigest;
  
  import <%= appPackage %>.lifecycle.delegate.AppManager;
  
  import static <%= appPackage %>.lifecycle.delegate.AppManager.APP_EXIT;
  import static <%= appPackage %>.lifecycle.delegate.AppManager.KILL_ALL;
  import static <%= appPackage %>.lifecycle.delegate.AppManager.SHOW_SNACKBAR;
  import static <%= appPackage %>.lifecycle.delegate.AppManager.START_ACTIVITY;
  
  /**
   * @author xiaobailong24
   * @date 2017/6/27
   * UiUtils
   */
  public class UiUtils {
      private static Toast mToast;
  
  
      private UiUtils() {
          throw new IllegalStateException("you can't instantiate me!");
      }
  
      /**
       * 设置hint大小
       *
       * @param size
       * @param v
       * @param res
       */
      public static void setViewHintSize(Context context, int size, TextView v, int res) {
          SpannableString ss = new SpannableString(getResources(context).getString(
                  res));
          // 新建一个属性对象,设置文字的大小
          AbsoluteSizeSpan ass = new AbsoluteSizeSpan(size, true);
          // 附加属性到文本
          ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
          // 设置hint,一定要进行转换,否则属性会消失
          v.setHint(new SpannedString(ss));
      }
  
  
      /**
       * dip转pix
       *
       * @param dpValue
       * @return
       */
      public static int dip2px(Context context, float dpValue) {
          final float scale = getResources(context).getDisplayMetrics().density;
          return (int) (dpValue * scale + 0.5f);
      }
  
      /**
       * 获得资源
       */
      public static Resources getResources(Context context) {
          return context.getResources();
      }
  
      /**
       * 得到字符数组
       */
      public static String[] getStringArray(Context context, int id) {
          return getResources(context).getStringArray(id);
      }
  
      /**
       * pix转dip
       */
      public static int pix2dip(Context context, int pix) {
          final float densityDpi = getResources(context).getDisplayMetrics().density;
          return (int) (pix / densityDpi + 0.5f);
      }
  
  
      /**
       * 从 dimens 中获得尺寸
       *
       * @param context
       * @param id
       * @return
       */
      public static int getDimens(Context context, int id) {
          return (int) getResources(context).getDimension(id);
      }
  
      /**
       * 从 dimens 中获得尺寸
       *
       * @param context
       * @param dimenName
       * @return
       */
      public static float getDimens(Context context, String dimenName) {
          return getResources(context).getDimension(getResources(context).getIdentifier(dimenName, "dimen", context.getPackageName()));
      }
  
      /**
       * 从String 中获得字符
       *
       * @return
       */
  
      public static String getString(Context context, int stringID) {
          return getResources(context).getString(stringID);
      }
  
      /**
       * 从String 中获得字符
       *
       * @return
       */
  
      public static String getString(Context context, String strName) {
          return getString(context, getResources(context).getIdentifier(strName, "string", context.getPackageName()));
      }
  
      /**
       * findview
       *
       * @param view
       * @param viewName
       * @param <T>
       * @return
       */
      public static <T extends View> T findViewByName(Context context, View view, String viewName) {
          int id = getResources(context).getIdentifier(viewName, "id", context.getPackageName());
          T v = (T) view.findViewById(id);
          return v;
      }
  
      /**
       * findview
       *
       * @param activity
       * @param viewName
       * @param <T>
       * @return
       */
      public static <T extends View> T findViewByName(Context context, Activity activity, String viewName) {
          int id = getResources(context).getIdentifier(viewName, "id", context.getPackageName());
          T v = (T) activity.findViewById(id);
          return v;
      }
  
      /**
       * 根据 layout 名字获得 id
       *
       * @param layoutName
       * @return
       */
      public static int findLayout(Context context, String layoutName) {
          int id = getResources(context).getIdentifier(layoutName, "layout", context.getPackageName());
          return id;
      }
  
      /**
       * 填充view
       *
       * @param detailScreen
       * @return
       */
      public static View inflate(Context context, int detailScreen) {
          return View.inflate(context, detailScreen, null);
      }
  
      /**
       * 单例 toast
       *
       * @param string
       */
      public static void makeText(Context context, String string) {
          if (mToast == null) {
              mToast = Toast.makeText(context, string, Toast.LENGTH_SHORT);
          }
          mToast.setText(string);
          mToast.show();
      }
  
      /**
       * 使用 {@link Snackbar} 显示文本消息
       *
       * @param text
       */
      public static void snackbarText(String text) {
          Message message = new Message();
          message.what = SHOW_SNACKBAR;
          message.obj = text;
          message.arg1 = 0;
          AppManager.post(message);
      }
  
      /**
       * 使用 {@link Snackbar} 长时间显示文本消息
       *
       * @param text
       */
      public static void snackbarTextWithLong(String text) {
          Message message = new Message();
          message.what = SHOW_SNACKBAR;
          message.obj = text;
          message.arg1 = 1;
          AppManager.post(message);
      }
  
  
      /**
       * 通过资源id获得drawable
       *
       * @param rID
       * @return
       */
      public static Drawable getDrawablebyResource(Context context, int rID) {
          return getResources(context).getDrawable(rID, null);
      }
  
  
      /**
       * 跳转界面 1 ,通过 {@link AppManager#startActivity(Class)}
       *
       * @param activityClass
       */
      public static void startActivity(Class activityClass) {
          Message message = new Message();
          message.what = START_ACTIVITY;
          message.obj = activityClass;
          AppManager.post(message);
      }
  
      /**
       * 跳转界面 2 ,通过 {@link AppManager#startActivity(Intent)}
       *
       * @param
       */
      public static void startActivity(Intent content) {
          Message message = new Message();
          message.what = START_ACTIVITY;
          message.obj = content;
          AppManager.post(message);
      }
  
  
      /**
       * 跳转界面 3
       *
       * @param activity
       * @param homeActivityClass
       */
      public static void startActivity(Activity activity, Class homeActivityClass) {
          Intent intent = new Intent(activity.getApplicationContext(), homeActivityClass);
          activity.startActivity(intent);
      }
  
      /**
       * 跳转界面 4
       *
       * @param
       */
      public static void startActivity(Activity activity, Intent intent) {
          activity.startActivity(intent);
      }
  
      /**
       * 获得屏幕的宽度
       *
       * @return
       */
      public static int getScreenWidth(Context context) {
          return getResources(context).getDisplayMetrics().widthPixels;
      }
  
      /**
       * 获得屏幕的高度
       *
       * @return
       */
      public static int getScreenHeidth(Context context) {
          return getResources(context).getDisplayMetrics().heightPixels;
      }
  
  
      /**
       * 获得颜色
       */
      public static int getColor(Context context, int rid) {
          return getResources(context).getColor(rid, null);
      }
  
      /**
       * 获得颜色
       */
      public static int getColor(Context context, String colorName) {
          return getColor(context, getResources(context).getIdentifier(colorName, "color", context.getPackageName()));
      }
  
      /**
       * 移除孩子
       *
       * @param view
       */
      public static void removeChild(View view) {
          ViewParent parent = view.getParent();
          if (parent instanceof ViewGroup) {
              ViewGroup group = (ViewGroup) parent;
              group.removeView(view);
          }
      }
  
      public static boolean isEmpty(Object obj) {
          if (obj == null) {
              return true;
          }
          return false;
      }
  
  
      /**
       * MD5
       *
       * @param string
       * @return
       * @throws Exception
       */
      public static String encodeToMD5(String string) {
          byte[] hash = new byte[0];
          try {
              hash = MessageDigest.getInstance("MD5").digest(
                      string.getBytes("UTF-8"));
          } catch (Exception e) {
              e.printStackTrace();
          }
          StringBuilder hex = new StringBuilder(hash.length * 2);
          for (byte b : hash) {
              if ((b & 0xFF) < 0x10) {
                  hex.append("0");
              }
              hex.append(Integer.toHexString(b & 0xFF));
          }
          return hex.toString();
      }
  
  
      /**
       * 全屏,并且沉侵式状态栏
       *
       * @param activity
       */
      public static void statuInScreen(Activity activity) {
          WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();
          attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
          activity.getWindow().setAttributes(attrs);
          activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
          activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
      }
  
  
      /**
       * 配置 recycleview
       *
       * @param recyclerView
       * @param layoutManager
       */
      public static void configRecycleView(final RecyclerView recyclerView
              , RecyclerView.LayoutManager layoutManager) {
          recyclerView.setLayoutManager(layoutManager);
          //如果可以确定每个item的高度是固定的，设置这个选项可以提高性能
          recyclerView.setHasFixedSize(true);
          recyclerView.setItemAnimator(new DefaultItemAnimator());
      }
  
      /**
       * 远程遥控 {@link AppManager#killAll()}
       */
      public static void killAll() {
          Message message = new Message();
          message.what = KILL_ALL;
          AppManager.post(message);
      }
  
      /**
       * 远程遥控 {@link AppManager#appExit()}
       */
      public static void exitApp() {
          Message message = new Message();
          message.what = APP_EXIT;
          AppManager.post(message);
      }
  
  }
  