package cn.sinata.xldutils.utils;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.res.Resources;
|
import android.util.DisplayMetrics;
|
import android.view.KeyCharacterMap;
|
import android.view.KeyEvent;
|
import android.view.ViewConfiguration;
|
|
import androidx.core.view.ViewConfigurationCompat;
|
|
/**
|
* 设备显示相关参数
|
* @author Administrator
|
*
|
*/
|
public class DensityUtil {
|
|
/**
|
* 获取屏幕宽度
|
* @param context
|
* @return
|
*/
|
public static int getDeviceWidth(Context context){
|
DisplayMetrics dm = new DisplayMetrics();
|
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
|
return dm.widthPixels;
|
}
|
|
|
/**
|
* 获取屏幕宽度
|
* @param context
|
* @return
|
*/
|
public static int getDeviceHeight(Context context){
|
|
DisplayMetrics dm = new DisplayMetrics();
|
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
|
return dm.heightPixels;
|
}
|
|
/**
|
* dip转换px
|
* @param context
|
* @param dipValue
|
* @return
|
*/
|
public static int dip2px(Context context, float dipValue){
|
final float scale = context.getResources().getDisplayMetrics().density;
|
return (int)(dipValue * scale + 0.5f);
|
}
|
|
/**
|
* px转换dip
|
* @param context
|
* @param pxValue
|
* @return
|
*/
|
public static int px2dip(Context context, float pxValue){
|
final float scale = context.getResources().getDisplayMetrics().density;
|
return (int)(pxValue / scale + 0.5f);
|
}
|
|
/**
|
* 将sp值转换为px值,保证文字大小不变
|
* @param context 上下文
|
* @param spValue
|
* (DisplayMetrics类中属性scaledDensity)
|
* @return
|
*/
|
public static int sp2px(Context context, float spValue) {
|
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
|
return (int) (spValue * fontScale + 0.5f);
|
}
|
|
public static float getDensity(Context context){
|
final float density = context.getResources().getDisplayMetrics().density;
|
return density;
|
}
|
|
// 判断设备是否有返回键、菜单键来确定是否有 NavigationBar
|
public static boolean hasNavigationBar(Context context) {
|
boolean hasMenuKey = ViewConfigurationCompat.hasPermanentMenuKey(ViewConfiguration.get(context));
|
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
|
if (!hasMenuKey && !hasBackKey) {
|
return true;
|
}
|
return false;
|
}
|
|
// 获取 NavigationBar 的高度
|
public static int getNavigationBarHeight(Activity activity) {
|
Resources resources = activity.getResources();
|
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
|
return resources.getDimensionPixelSize(resourceId);
|
}
|
}
|