java 中 print類似的用法 android density dip與px


首先說說density,density值表示每英寸有多少個顯示點,與分辨率是兩個不同的概念。

Android主要有以下幾種屏:

QVGA和WQVGA屏density=120;

HVGA屏density=160;

WVGA屏density=240;

下面以480dip*800dip的WVGA(density=240)爲例,詳細列出不同density下屏幕分辨率信息:

當density=120時 屏幕實際分辨率爲240px*400px (兩個點對應一個分辨率)
狀態欄和標題欄高各19px或者25dip
橫屏是屏幕寬度400px 或者800dip,工作區域高度211px或者480dip
豎屏時屏幕寬度240px或者480dip,工作區域高度381px或者775dip

density=160時 屏幕實際分辨率爲320px*533px (3個點對應兩個分辨率)
狀態欄和標題欄高個25px或者25dip
橫屏是屏幕寬度533px 或者800dip,工作區域高度295px或者480dip
豎屏時屏幕寬度320px或者480dip,工作區域高度508px或者775dip

density=240時 屏幕實際分辨率爲480px*800px (一個點對於一個分辨率)
狀態欄和標題欄高個38px或者25dip
橫屏是屏幕寬度800px 或者800dip,工作區域高度442px或者480dip
豎屏時屏幕寬度480px或者480dip,工作區域高度762px或者775dip

apk的資源包中,當屏幕density=240時使用hdpi標籤的資源
當屏幕density=160時,使用mdpi標籤的資源
當屏幕density=120時,使用ldpi標籤的資源。
不加任何標籤的資源是各種分辨率情況下共用的。
建議:佈局時儘量使用單位dip,少使用px。

device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬件有關,一般我們爲了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。


  1. import android.content.Context;
  2. import android.util.DisplayMetrics;

  3. /**
  4. * 計算公式 pixels = dips * (density / 160)
  5. *
  6. * @version 1.0.1 2010-12-11
  7. *
  8. * @author
  9. */
  10. public class DensityUtil {

  11. private static final String TAG = DensityUtil.class.getSimpleName();

  12. // 當前屏幕的densityDpi
  13. private static float dmDensityDpi = 0.0f;
  14. private static DisplayMetrics dm;
  15. private static float scale = 0.0f;

  16. /**
  17. *
  18. * 根據構造函數獲得當前手機的屏幕係數
  19. *
  20. * */
  21. public DensityUtil(Context context) {
  22. // 獲取當前屏幕
  23. dm = new DisplayMetrics();
  24. dm = context.getApplicationContext().getResources().getDisplayMetrics();
  25. // 設置DensityDpi
  26. setDmDensityDpi(dm.densityDpi);
  27. // 密度因子
  28. scale = getDmDensityDpi() / 160;
  29. Logger.i(TAG, toString());
  30. }

  31. /**
  32. * 當前屏幕的density因子
  33. *
  34. * @param DmDensity
  35. * @retrun DmDensity Getter
  36. * */
  37. public static float getDmDensityDpi() {
  38. return dmDensityDpi;
  39. }

  40. /**
  41. * 當前屏幕的density因子
  42. *
  43. * @param DmDensity
  44. * @retrun DmDensity Setter
  45. * */
  46. public static void setDmDensityDpi(float dmDensityDpi) {
  47. DensityUtil.dmDensityDpi = dmDensityDpi;
  48. }

  49. /**
  50. * 密度轉換像素
  51. * */
  52. public static int dip2px(float dipValue) {

  53. return (int) (dipValue * scale + 0.5f);

  54. }

  55. /**
  56. * 像素轉換密度
  57. * */
  58. public int px2dip(float pxValue) {
  59. return (int) (pxValue / scale + 0.5f);
  60. }

  61. @Override
  62. public String toString() {
  63. return " dmDensityDpi:" + dmDensityDpi;
  64. }
  65. }
import android.content.Context;
import android.util.DisplayMetrics;

/**
 * 計算公式 pixels = dips * (density / 160)
 * 
 * @version 1.0.1 2010-12-11
 * 
 * @author
 */
public class DensityUtil {
	
	private static final String TAG = DensityUtil.class.getSimpleName();
	
	// 當前屏幕的densityDpi
	private static float dmDensityDpi = 0.0f;
	private static DisplayMetrics dm;
	private static float scale = 0.0f;

	/**
	 * 
	 * 根據構造函數獲得當前手機的屏幕係數
	 * 
	 * */
	public DensityUtil(Context context) {
		// 獲取當前屏幕
		dm = new DisplayMetrics();
		dm = context.getApplicationContext().getResources().getDisplayMetrics();
		// 設置DensityDpi
		setDmDensityDpi(dm.densityDpi);
		// 密度因子
		scale = getDmDensityDpi() / 160;
		Logger.i(TAG, toString());
	}

	/**
	 * 當前屏幕的density因子
	 * 
	 * @param DmDensity
	 * @retrun DmDensity Getter
	 * */
	public static float getDmDensityDpi() {
		return dmDensityDpi;
	}

	/**
	 * 當前屏幕的density因子
	 * 
	 * @param DmDensity
	 * @retrun DmDensity Setter
	 * */
	public static void setDmDensityDpi(float dmDensityDpi) {
		DensityUtil.dmDensityDpi = dmDensityDpi;
	}

	/**
	 * 密度轉換像素
	 * */
	public static int dip2px(float dipValue) {

		return (int) (dipValue * scale + 0.5f);

	}

	/**
	 * 像素轉換密度
	 * */
	public int px2dip(float pxValue) {
		return (int) (pxValue / scale + 0.5f);
	}

	@Override
	public String toString() {
		return " dmDensityDpi:" + dmDensityDpi;
	}
}




 只是查看的話在onCreate()

加入下面幾句;

//       DisplayMetrics dm =new DisplayMetrics() ;
//       dm=this.getApplicationContext().getResources().getDisplayMetrics();
//       float previewDensity= dm.density;
//         int dip= dm.densityDpi;
//       
//       Log.e("________previewDensity","   " +  dip+"      "  +previewDensity );



java 中 print類似的用法

String   str = String.format("mWorkDir=%s  ,number= %d", mWorkDir,  number);

Log.e("TAG",str);






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章