You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
447 lines
13 KiB
447 lines
13 KiB
package com.project.survey.util;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.ColorStateList;
|
|
import android.content.res.Resources;
|
|
import android.content.res.TypedArray;
|
|
import android.graphics.Color;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Build;
|
|
import android.view.View;
|
|
import android.view.animation.Animation;
|
|
import android.view.animation.AnimationUtils;
|
|
|
|
import androidx.annotation.AnimRes;
|
|
import androidx.annotation.ArrayRes;
|
|
import androidx.annotation.ColorRes;
|
|
import androidx.annotation.DimenRes;
|
|
import androidx.annotation.DrawableRes;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.StringRes;
|
|
import androidx.annotation.StyleableRes;
|
|
import androidx.appcompat.content.res.AppCompatResources;
|
|
import androidx.core.content.ContextCompat;
|
|
|
|
import com.project.survey.App;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 获取res中的资源
|
|
*
|
|
* @author xuexiang
|
|
* @since 2018/12/18 上午12:14
|
|
*/
|
|
public final class ResUtils {
|
|
|
|
private ResUtils() {
|
|
throw new UnsupportedOperationException("u can't instantiate me...");
|
|
}
|
|
|
|
/**
|
|
* 获取resources对象
|
|
*
|
|
* @return resources对象
|
|
*/
|
|
@Deprecated
|
|
public static Resources getResources() {
|
|
return App.getApp().getResources();
|
|
}
|
|
|
|
/**
|
|
* 获取resources对象
|
|
*
|
|
* @param context 上下文
|
|
* @return resources对象
|
|
*/
|
|
public static Resources getResources(@NonNull Context context) {
|
|
return context.getResources();
|
|
}
|
|
|
|
/**
|
|
* 获取字符串
|
|
*
|
|
* @param resId 资源id
|
|
* @return 字符串
|
|
*/
|
|
@Deprecated
|
|
public static String getString(@StringRes int resId) {
|
|
return getResources().getString(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取字符串
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return 字符串
|
|
*/
|
|
public static String getString(@NonNull Context context, @StringRes int resId) {
|
|
return context.getResources().getString(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取资源图片
|
|
*
|
|
* @param resId 图片资源id
|
|
* @return 资源图片
|
|
*/
|
|
@Deprecated
|
|
public static Drawable getDrawable(@DrawableRes int resId) {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
return App.getApp().getDrawable(resId);
|
|
}
|
|
return getResources().getDrawable(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取资源图片【和主题有关】
|
|
*
|
|
* @param resId 图片资源id
|
|
* @return 资源图片
|
|
*/
|
|
public static Drawable getDrawable(Context context, @DrawableRes int resId) {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
return context.getDrawable(resId);
|
|
}
|
|
return AppCompatResources.getDrawable(context, resId);
|
|
}
|
|
|
|
/**
|
|
* 获取svg资源图片
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 图片资源id
|
|
* @return svg资源图片
|
|
*/
|
|
public static Drawable getVectorDrawable(Context context, @DrawableRes int resId) {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
return context.getDrawable(resId);
|
|
}
|
|
return AppCompatResources.getDrawable(context, resId);
|
|
}
|
|
|
|
/**
|
|
* 获取Drawable属性(兼容VectorDrawable)
|
|
*
|
|
* @param context 上下文
|
|
* @param typedArray 样式属性数组
|
|
* @param styleableResId 样式资源ID
|
|
* @return Drawable
|
|
*/
|
|
public static Drawable getDrawableAttrRes(Context context, TypedArray typedArray, @StyleableRes int styleableResId) {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
return typedArray.getDrawable(styleableResId);
|
|
} else {
|
|
int resourceId = typedArray.getResourceId(styleableResId, -1);
|
|
if (resourceId != -1) {
|
|
return AppCompatResources.getDrawable(context, resourceId);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 获取ColorStateList属性(兼容?attr属性)
|
|
*
|
|
* @param context 上下文
|
|
* @param typedArray 样式属性数组
|
|
* @param styleableResId 样式资源ID
|
|
* @return ColorStateList
|
|
*/
|
|
public static ColorStateList getColorStateListAttrRes(Context context, TypedArray typedArray, @StyleableRes int styleableResId) {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
return typedArray.getColorStateList(styleableResId);
|
|
} else {
|
|
int resourceId = typedArray.getResourceId(styleableResId, -1);
|
|
if (resourceId != -1) {
|
|
return AppCompatResources.getColorStateList(context, resourceId);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 获取dimes值,返回的是精确的值
|
|
*
|
|
* @param resId 资源id
|
|
* @return dimes值,返回的是精确的值
|
|
*/
|
|
@Deprecated
|
|
public static float getDimens(@DimenRes int resId) {
|
|
return getResources().getDimension(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取dimes值,返回的是精确的值
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return dimes值,返回的是精确的值
|
|
*/
|
|
public static float getDimens(@NonNull Context context, @DimenRes int resId) {
|
|
return context.getResources().getDimension(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取Color值
|
|
*
|
|
* @param resId 资源id
|
|
* @return Color值
|
|
*/
|
|
@Deprecated
|
|
public static int getColor(@ColorRes int resId) {
|
|
return getResources().getColor(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取Color值
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return Color值
|
|
*/
|
|
public static int getColor(@NonNull Context context, @ColorRes int resId) {
|
|
return ContextCompat.getColor(context, resId);
|
|
}
|
|
|
|
/**
|
|
* 获取ColorStateList值
|
|
*
|
|
* @param resId 资源id
|
|
* @return ColorStateList值
|
|
*/
|
|
@Deprecated
|
|
public static ColorStateList getColors(@ColorRes int resId) {
|
|
return getResources().getColorStateList(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取ColorStateList值
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return ColorStateList值
|
|
*/
|
|
public static ColorStateList getColors(@NonNull Context context, @ColorRes int resId) {
|
|
return ContextCompat.getColorStateList(context, resId);
|
|
}
|
|
|
|
/**
|
|
* 获取dimes值,返回的是【去余取整】的值
|
|
*
|
|
* @param resId 资源id
|
|
* @return dimes值【去余取整】
|
|
*/
|
|
@Deprecated
|
|
public static int getDimensionPixelOffset(@DimenRes int resId) {
|
|
return getResources().getDimensionPixelOffset(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取dimes值,返回的是【去余取整】的值
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return dimes值【去余取整】
|
|
*/
|
|
public static int getDimensionPixelOffset(@NonNull Context context, @DimenRes int resId) {
|
|
return context.getResources().getDimensionPixelOffset(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取dimes值,返回的是【4舍5入取整】的值
|
|
*
|
|
* @param resId 资源id
|
|
* @return dimes值【4舍5入取整】
|
|
*/
|
|
@Deprecated
|
|
public static int getDimensionPixelSize(@DimenRes int resId) {
|
|
return getResources().getDimensionPixelSize(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取dimes值,返回的是【4舍5入取整】的值
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return dimes值【4舍5入取整】
|
|
*/
|
|
public static int getDimensionPixelSize(@NonNull Context context, @DimenRes int resId) {
|
|
return context.getResources().getDimensionPixelSize(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取字符串的数组
|
|
*
|
|
* @param resId 资源id
|
|
* @return 字符串的数组
|
|
*/
|
|
@Deprecated
|
|
public static String[] getStringArray(@ArrayRes int resId) {
|
|
return getResources().getStringArray(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取字符串的数组
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return 字符串的数组
|
|
*/
|
|
public static String[] getStringArray(Context context, @ArrayRes int resId) {
|
|
return context.getResources().getStringArray(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取字符串的集合
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @return 字符串的集合
|
|
*/
|
|
@NonNull
|
|
public static List<String> getStringList(@NonNull Context context, int resId) {
|
|
return getStringList(context, resId, 0);
|
|
}
|
|
|
|
/**
|
|
* 获取字符串的集合
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 资源id
|
|
* @param emptyId 空资源id
|
|
* @return 字符串的集合
|
|
*/
|
|
@NonNull
|
|
public static List<String> getStringList(@NonNull Context context, int resId, int emptyId) {
|
|
List<String> data = new ArrayList<>();
|
|
if (resId == emptyId) {
|
|
return data;
|
|
}
|
|
String[] array = context.getResources().getStringArray(resId);
|
|
if (array.length > 0) {
|
|
data.addAll(Arrays.asList(array));
|
|
}
|
|
return data;
|
|
}
|
|
|
|
/**
|
|
* 获取Drawable的数组
|
|
*
|
|
* @param context context
|
|
* @param resId 资源id
|
|
* @return Drawable的数组
|
|
*/
|
|
public static Drawable[] getDrawableArray(Context context, @ArrayRes int resId) {
|
|
TypedArray ta = getResources().obtainTypedArray(resId);
|
|
Drawable[] icons = new Drawable[ta.length()];
|
|
for (int i = 0; i < ta.length(); i++) {
|
|
int id = ta.getResourceId(i, 0);
|
|
if (id != 0) {
|
|
icons[i] = ContextCompat.getDrawable(context, id);
|
|
}
|
|
}
|
|
ta.recycle();
|
|
return icons;
|
|
}
|
|
|
|
/**
|
|
* 获取数字的数组
|
|
*
|
|
* @param resId 数组资源id
|
|
* @return 数字的数组
|
|
*/
|
|
@Deprecated
|
|
public static int[] getIntArray(@ArrayRes int resId) {
|
|
return getResources().getIntArray(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取数字的数组
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 数组资源id
|
|
* @return 数字的数组
|
|
*/
|
|
public static int[] getIntArray(@NonNull Context context, @ArrayRes int resId) {
|
|
return context.getResources().getIntArray(resId);
|
|
}
|
|
|
|
/**
|
|
* 获取动画
|
|
*
|
|
* @param resId 动画资源id
|
|
* @return 动画
|
|
*/
|
|
@Deprecated
|
|
public static Animation getAnim(@AnimRes int resId) {
|
|
return AnimationUtils.loadAnimation(App.getApp(), resId);
|
|
}
|
|
|
|
/**
|
|
* 获取动画
|
|
*
|
|
* @param context 上下文
|
|
* @param resId 动画资源id
|
|
* @return 动画
|
|
*/
|
|
public static Animation getAnim(@NonNull Context context, @AnimRes int resId) {
|
|
return AnimationUtils.loadAnimation(context, resId);
|
|
}
|
|
|
|
|
|
/**
|
|
* Check if layout direction is RTL
|
|
*
|
|
* @return {@code true} if the layout direction is right-to-left
|
|
*/
|
|
@Deprecated
|
|
public static boolean isRtl() {
|
|
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 &&
|
|
getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
|
|
}
|
|
|
|
|
|
/**
|
|
* Check if layout direction is RTL
|
|
*
|
|
* @param context context
|
|
* @return {@code true} if the layout direction is right-to-left
|
|
*/
|
|
public static boolean isRtl(@NonNull Context context) {
|
|
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 &&
|
|
context.getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
|
|
}
|
|
|
|
/**
|
|
* Darkens a color by a given factor.
|
|
*
|
|
* @param color the color to darken
|
|
* @param factor The factor to darken the color.
|
|
* @return darker version of specified color.
|
|
*/
|
|
public static int darker(int color, float factor) {
|
|
return Color.argb(Color.alpha(color), Math.max((int) (Color.red(color) * factor), 0),
|
|
Math.max((int) (Color.green(color) * factor), 0),
|
|
Math.max((int) (Color.blue(color) * factor), 0));
|
|
}
|
|
|
|
/**
|
|
* Lightens a color by a given factor.
|
|
*
|
|
* @param color The color to lighten
|
|
* @param factor The factor to lighten the color. 0 will make the color unchanged. 1 will make the
|
|
* color white.
|
|
* @return lighter version of the specified color.
|
|
*/
|
|
public static int lighter(int color, float factor) {
|
|
int red = (int) ((Color.red(color) * (1 - factor) / 255 + factor) * 255);
|
|
int green = (int) ((Color.green(color) * (1 - factor) / 255 + factor) * 255);
|
|
int blue = (int) ((Color.blue(color) * (1 - factor) / 255 + factor) * 255);
|
|
return Color.argb(Color.alpha(color), red, green, blue);
|
|
}
|
|
|
|
}
|
|
|