Android適配方案小結(二)

該節主要記錄從代碼中獲取與屏幕適配相關的各個參數:

Java代碼如下

public class ScreenUtil {

	/**
	 * Note:
	 * 隻有activity可以使用getWindowManager,否則應該使用
	 * Context.getResources().getDisplayMetrics()來獲取
	*/
	
	/**
	 * 獲取DisplayMetric相關參數
	 * @param context
	 * @return
	 */
	public static String getMetricParams(Activity context){
		DisplayMetrics dm = new DisplayMetrics();
		context.getWindowManager().getDefaultDisplay().getMetrics(dm);
		return "density:"+dm.density+";densityDpi:"+dm.densityDpi
			+";height:"+dm.heightPixels+";width:"+dm.widthPixels
			+";scaledDensity:"+dm.scaledDensity+";xdpi:"+dm.xdpi
			+";ydpi:"+dm.ydpi;
	}
	
	/**
	 * 獲取屏幕尺寸,單位為像素
	 * @param context
	 * @return
	 */
	public static String getScreenSizeInInPixels(Activity context){
		DisplayMetrics dm = new DisplayMetrics();
		context.getWindowManager().getDefaultDisplay().getMetrics(dm);
		double heightInInPixels = (double)dm.heightPixels;
		double widthInInPixels = (double)dm.widthPixels;
		return "高:"+heightInInPixels+" 寬:"+widthInInPixels+" 單位(像素)";
	}
	
	/**
	 * 獲取屏幕尺寸,單位為英寸
	 * 計算屏幕尺寸應該使用精確密度:xdpi ydpi來計算
	 * 使用歸一化密度:densitydpi是錯誤的,它是固定值,
	 * 120 160 240 320 480,根據dp計算像素才使用它
	 * @param context
	 * @return
	 */
	public static String getScreenSizeInInch(Activity context){
		DisplayMetrics dm = new DisplayMetrics();
		context.getWindowManager().getDefaultDisplay().getMetrics(dm);
		double heightInInch = (double)dm.heightPixels / (double)dm.ydpi;
		double widthInInch = (double)dm.widthPixels / (double)dm.xdpi;
		double ScrrenSizeInInch = Math.sqrt(heightInInch*heightInInch
				+ widthInInch*widthInInch);
		return "高:"+heightInInch+" 寬:"+widthInInch+" 尺寸:"+ScrrenSizeInInch
				+" 單位(英寸)";
	}
	
	/**
	 * 獲取屏幕尺寸,單位為dp
	 * @param context
	 * @return
	 */
	public static String getScreenSizeInInDp(Activity context){
		DisplayMetrics dm = new DisplayMetrics();
		context.getWindowManager().getDefaultDisplay().getMetrics(dm);
		float heightInInDp = px2dip((Context)context, (float)dm.heightPixels);
		float widthInInDp = px2dip((Context)context, (float)dm.widthPixels);
		return "高:"+heightInInDp+" 寬:"+widthInInDp+" 單位(dp)";
	}
	
	/**
	 * dp轉px
	 * @param context
	 * @param dpValue
	 * @return
	 */
	public static int dip2px (Context context, float dpValue){
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int)(dpValue*scale+0.5f);
	}
	
	/**
	 * px轉dp
	 * @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);
	}
	
}

XML的設置:

<support-screens
android:anyDensity = “true”
android:largeScreens = “true”
android:normalScreens = “true”
android:resizeable = “true”
android:smallScreens = “true
android:xlargeScreens = “true”>
android:anyDensity = “true”時,應用程序安裝在不同的密度的終端上面,
程序分別會去加載xxhdpi, xhdpi, hdpi, mdpi,ldpi文件夾中的資源。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *