android常用工具類 --- UI操作

public class UIUtils {
    public static Context getContext() {
        return XXApplication.getApplication();
    }

    public static Thread getMainThread() {
        return XXApplication.getMainThread();
    }

    public static long getMainThreadId() {
        return XXApplication.getMainThreadId();
    }

    /**
     * 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);
    }

    /**
     * 獲取主線程的handler
     */
    public static Handler getHandler() {
        return XXApplication.getMainThreadHandler();
    }

    /**
     * 延時在主線程執行runnable
     */
    public static boolean postDelayed(Runnable runnable, long delayMillis) {
        return getHandler().postDelayed(runnable, delayMillis);
    }

    /**
     * 在主線程執行runnable
     */
    public static boolean post(Runnable runnable) {
        return getHandler().post(runnable);
    }

    /**
     * 從主線程looper裏面移除runnable
     */
    public static void removeCallbacks(Runnable runnable) {
        getHandler().removeCallbacks(runnable);
    }

    public static View inflate(int resId) {
        return LayoutInflater.from(getContext()).inflate(resId, null);
    }

    /**
     * 獲取資源
     */
    public static Resources getResources() {
        return getContext().getResources();
    }

    /**
     * 獲取文字
     */
    public static String getString(int resId) {
        return getResources().getString(resId);
    }

    /**
     * 獲取文字數組
     */
    public static String[] getStringArray(int resId) {
        return getResources().getStringArray(resId);
    }

    /**
     * 獲取dimen
     */
    public static int getDimens(int resId) {
        return getResources().getDimensionPixelSize(resId);
    }

    /**
     * 獲取drawable
     */
    @SuppressWarnings("deprecation")
    public static Drawable getDrawable(int resId) {
        return getResources().getDrawable(resId);
    }

    /**
     * 獲取顏色
     */
    public static int getColor(int resId) {
        return getResources().getColor(resId);
    }

    /**
     * 獲取顏色選擇器
     */
    public static ColorStateList getColorStateList(int resId) {
        return getResources().getColorStateList(resId);
    }


    /**
     * 判斷當前的線程是不是在主線程
     *
     * @return
     */
    public static boolean isRunInMainThread() {
        return android.os.Process.myTid() == getMainThreadId();
    }

    public static void runInMainThread(Runnable runnable) {
        if (isRunInMainThread()) {
            runnable.run();
        } else {
            post(runnable);
        }
    }

    /**
     * 對toast的簡易封裝。線程安全,可以在非UI線程調用。
     */
    public static void showToastSafe(final int resId) {
        showToastSafe(getString(resId));
    }

    /**
     * 對toast的簡易封裝。線程安全,可以在非UI線程調用。
     */
    public static void showToastSafe(final String str) {
        if (isRunInMainThread()) {
            showToast(str);
        } else {
            post(new Runnable() {
                @Override
                public void run() {
                    showToast(str);
                }
            });
        }
    }

    private static Toast mToast;

    private static void showToast(String text) {
        if (mToast == null) {
            mToast = Toast.makeText(UIUtils.getContext(), text, Toast.LENGTH_SHORT);
        } else {
            mToast.setText(text);
            mToast.setDuration(Toast.LENGTH_SHORT);
        }
        mToast.show();
    }

    /**
     * 得到屏幕的高度
     *
     * @param activity
     * @return
     */
    @SuppressWarnings("deprecation")
    public static int getSreenHeight(Activity activity) {
        return activity.getWindowManager().getDefaultDisplay().getHeight();
    }

    /**
     * 得到屏幕的寬度
     *
     * @param activity
     * @return
     */
    @SuppressWarnings("deprecation")
    public static int getSreenWidth(Activity activity) {
        return activity.getWindowManager().getDefaultDisplay().getWidth();
    }

    /**
     * 得到一個控件相對於屏幕左側的位置
     *
     * @param view
     * @return
     */
    public static int getLeftOnScreen(View view) {
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        return location[0];

    }

    /**
     * 得到一個控件相對於屏幕左側的位置
     *
     * @param view
     * @return
     */
    public static int getRightOnScreen(View view) {
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        return location[0];

    }

    /**
     * 得到一個控件相對於屏幕頂部的位置
     *
     * @param view
     * @return
     */
    public static int getTopOnScreen(View view) {
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        return location[1];

    }

    /**
     * 獲得狀態欄的高度
     *
     * @return
     */
    public static int getStatusHeight() {

        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 = getResources().getDimensionPixelSize(height);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return statusHeight;
    }

    /**
     * 設置沉浸式狀態欄,以一個高度爲0的View爲基礎(在每個Activity的setContentView之後添加效果爲佳)
     *
     * @param activity 當前的Activity
     * @param view     高度爲0的view
     * @param type     根佈局的類型,線性佈局爲1,相對佈局爲2
     */
    public static void setStatusColor(Activity activity, View view, int type, int i) {

        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                activity.getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                activity.getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
                if (1 == type) {
                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, UIUtils.getStatusHeight());
                    view.setLayoutParams(params);
                } else if (2 == type) {
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, UIUtils.getStatusHeight());
                    view.setLayoutParams(params);

                }
                view.setBackgroundColor(getColor(R.color.our_main_color));
            } else {
                view.setVisibility(View.GONE);
            }
        } catch (Exception e) {
            view.setVisibility(View.GONE);
            e.printStackTrace();
            Log.e("MainActivity", "沉浸式狀態欄設置出錯");
        }
    }

    /**
     * 實現文本複製功能
     * 注意:導包的時候
     * API 11之前: android.text.ClipboardManager
     * API 11之後: android.content.ClipboardManager
     *
     * @param content
     */
    public static void copy(String content) {
        // 得到剪貼板管理器
        ClipboardManager cmb = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
        cmb.setText(content.trim());
    }

    /**
     * 實現粘貼功能
     *
     * @return
     */
    public static String paste() {
        // 得到剪貼板管理器
        ClipboardManager cmb = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
        return cmb.getText().toString().trim();
    }

    public static void setHeightByWidth(View view, float ratio) {
        if (ratio == 0) {
            throw new IllegalArgumentException("比例不能爲零!");
        } else {
            view.getLayoutParams().height = (int) (view.getLayoutParams().width / ratio);
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章