小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android Density(密度)

 aaie_ 2012-09-24

1.  什么是density

引用
1) density
density表示每英寸有多少個(gè)顯示點(diǎn)(邏輯值),它的單位是dpi:dot per inch,通常屏幕大時(shí),density就大,屏幕小時(shí),density就小,通常
屏幕實(shí)際分辨率為240px*400px時(shí),density=120
屏幕實(shí)際分辨率為320px*533px,density=160
屏幕實(shí)際分辨率為480px*800px,density=240

2)  分辨率
是整個(gè)屏是多少點(diǎn),比如800x480,它是軟件的顯示單位

3) 從Android1.6版本開(kāi)始支持density(對(duì)應(yīng)API Level 4)
用于解決應(yīng)用在屏幕大小不同的硬件上正常顯示的問(wèn)題



2. 相關(guān)代碼及設(shè)置

引用
1)         AndroidManifest.xml


這個(gè)參數(shù)在API Level 4也就是SDK 1.6以后才啟用的,而且1.6版本的API Level 4的應(yīng)用默認(rèn)值就是True

2) 資源目錄名(android 2.0以后)
res/xxx-hdpi         當(dāng)density為240時(shí),使用此目錄下的資源
res/xxx-mdpi        當(dāng)density為160時(shí),使用此目錄下的資源
res/xxx-ldpi          當(dāng)density為120時(shí),使用此目錄下的資源
res/xxx                 不常后綴,為默認(rèn)設(shè)置,同xxx-mdpi

3) 資源單位(xml文件中定義大小的單位)

a)  dp=dip=dx (Density independent pixel)
基于屏幕密度的抽象單位,設(shè)備無(wú)關(guān)的點(diǎn),用于說(shuō)明與密度無(wú)關(guān)的尺寸和位置。這些單位是相對(duì)于一個(gè)160dpi的屏幕,所有一個(gè)dp是160dpi屏幕上的一個(gè)點(diǎn)。

b)  px
px指軟件的單位點(diǎn),設(shè)備相關(guān)的點(diǎn)

c)  具體使用

i.布局時(shí)盡量使用單位dip,少使用px
若使用px,如果設(shè)某控件大小400x400px,在800x480上顯示正常,而在533x320的屏上就超出屏幕了
若使用dp,如果設(shè)某控件大小為160x160dp,就可以通過(guò)從系統(tǒng)中取density來(lái)算出真正的大小,比如在800x480屏的density設(shè)為240,而533x320屏的density設(shè)為160,借以下公式計(jì)算
pixels = dips * (density / 160)
在800x480在屏中顯示240象素,而在533x320的屏中顯示為160象素,控件在屏中顯示的比例是一樣的。

ii. 內(nèi)部的處理過(guò)程分為三步:
取screen中其它元素,轉(zhuǎn)為應(yīng)用的值,計(jì)算應(yīng)用各控件位置,然后再轉(zhuǎn)成800x480以供真正顯示
若res-xxx不存在,則讀取res有的資源,然后對(duì)其做相應(yīng)縮放



3. 實(shí)現(xiàn)density的關(guān)鍵源碼

引用
1)         BitmapFactory.java(用于縮放圖片)

2)         ComptibilityInfo.java(用于位置計(jì)算)



4、取得屏幕信息(寬高等)

Java代碼 復(fù)制代碼 收藏代碼
  1. public static String getDisplayMetrics(Context cx) {   
  2.   String str = "";   
  3.   DisplayMetrics dm = new DisplayMetrics();   
  4.   dm = cx.getApplicationContext().getResources().getDisplayMetrics();   
  5.   int screenWidth = dm.widthPixels;   
  6.   int screenHeight = dm.heightPixels;   
  7.   float density = dm.density;   
  8.   float xdpi = dm.xdpi;   
  9.   float ydpi = dm.ydpi;   
  10.   str += "The absolute width:" + String.valueOf(screenWidth) + "pixels\n";   
  11.   str += "The absolute heightin:" + String.valueOf(screenHeight)   
  12.       + "pixels\n";   
  13.   str += "The logical density of the display.:" + String.valueOf(density)   
  14.       + "\n";   
  15.   str += "X dimension :" + String.valueOf(xdpi) + "pixels per inch\n";   
  16.   str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inch\n";   
  17.   return str;   
  18. }  

 

5 取得狀態(tài)欄和標(biāo)題欄高度

Java代碼 復(fù)制代碼 收藏代碼
  1. TextView tv1;   
  2.   
  3. @Override  
  4. protected void onCreate(Bundle savedInstanceState) {   
  5.   super.onCreate(savedInstanceState);   
  6.   setContentView(R.layout.layout_test2);   
  7.   tv1 = (TextView) findViewById(R.id.TextView01);   
  8.   tv1.post(new Runnable(){    
  9.     public void run()    
  10.     {    
  11.       processLayout();    
  12.     }    
  13.   });    
  14. }   
  15.   
  16. private void processLayout(){   
  17.      
  18.   Rect rect= new Rect();    
  19.   Window window= getWindow();    
  20.   tv1.getWindowVisibleDisplayFrame(rect);    
  21.   //狀態(tài)欄高度   
  22.   int statusBarHeight= rect.top;    
  23.   int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();    
  24.   //標(biāo)題欄高度   
  25.   int titleBarHeight= contentViewTop - statusBarHeight;    
  26.   //測(cè)試結(jié)果:ok之后 100多 ms 才運(yùn)行了    
  27.   Log.v("test""=-init-= statusBarHeight="+statusBarHeight+    
  28.   " contentViewTop="+contentViewTop+    
  29.   " titleBarHeight="+titleBarHeight);       
  30.   
  31. }  

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多