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);
}
}
}
android常用工具類 --- UI操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.