Android常用工具方法
本文意在整理安卓开发中常用的方法,处理一些需要特殊处理的地方
获取屏幕尺寸
屏幕尺寸DisplayMetrics
其中包含了很多信息
DisplayMetrics {
//宽度
int widthPixels
//高度
int heightPixels
//密度
float density
//密度dpi
int densityDpi
//缩放密度
float scaledDensity
//宽度dpi
int xdpi
//高度dpi
int ydpi
}
public static DisplayMetrics (Context context) {
return context.getResources().getDisplayMetrics();
}
获取某个属性资源文件id
/**
* @param sourceName 资源定义的名称
* @param sourceType 资源定义的类型 dimen,color,int,String,drawable...
* @param packageBelong 资源所在的包 一般"android"表示android 系统的,另外就是应用的 当前应用的包名
*/
public static int getIdentifier(Context context,String sourceName,String sourceType,
String packageBelong) {
return context.getResources().getIdentifier(sourceName, sourceType, packageBelong);
}
获取状态栏高度
public static int getStatusBarHeight(Context context) {
return context.getResources().getDimensionPixelSize(getIdentifier(context,
"status_bar_height", "dimen", "android"));
}
获取底部导航栏高度
public static int getNavigationBarHeight(Context context) {
return context.getResources().getDimensionPixelSize(getIdentifier(context,
"navigation_bar_height", "dimen", "android"));
}
判断是否有导航栏
/**
* 通过获取android系统配置,确保准确获取是否有导航栏
* @param context
* @return
*/
public boolean checkDeviceHasNavigationBar(Context context) {
boolean hasNavigationBar = false;
Resources rs = context.getResources();
int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
if (id > 0) {
hasNavigationBar = rs.getBoolean(id);
}
try {
Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
Method m = systemPropertiesClass.getMethod("get", String.class);
String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
hasNavigationBar = false;
} else if ("0".equals(navBarOverride)) {
hasNavigationBar = true;
}
} catch (Exception e) {
}
return hasNavigationBar;
}