查詢到執行的system service后,就能夠在dumpsys后面加上service的名字,查看指定的service信息。
adb shell dumpsys activity
adb shell dumpsys cpuinfo
adb shell dumpsys battery
adb shell dumpsys window(最后部分能夠看到分辨率的信息)=====
-------------------------------------------------
Android Developers關於dp的文檔我看過N次,那個px和dp的轉換公式我記得非常清楚: px = dp * (dpi / 160),原來這里的dpi是歸一化后的dpi,可能值僅僅有120(low)、160(medium)、240(high)、 320(xhigh)四種,而我之前理解的居然是實際設備真實的dpi!
1 Android手機眼下常見的分辨率
4:3VGA 640*480 (Video Graphics Array)
QVGA 320*240 (Quarter VGA)
HVGA 480*320 (Half-size VGA)
SVGA 800*600 (Super VGA)
5:3
WVGA 800*480 (Wide VGA)
16:9
FWVGA 854*480 (Full Wide VGA)
HD 1920*1080 High Definition
QHD 960*540
720p 1280*720 標清
1080p 1920*1080 高清
1.2 分辨率相應DPI
"HVGA mdpi"
"WVGA hdpi "
"FWVGA hdpi "
"QHD hdpi "
"720P xhdpi"
"1080P xxhdpi " =======》看清
2 屏幕適配的注意事項
2.1.1 AndroidManifest.xml設置
在中Menifest中加入子元素
android:anyDensity="true"時,應用程序安裝在不同密度的終端上時,程序會分別載入xxhdpi、xhdpi、hdpi、mdpi、ldpi目錄中的資源。
相反,假設設為false,即使在目錄下擁有同樣資源,應用不會自己主動地去對應目錄下尋找資源:
1) 假設drawable-hdpi、drawable-mdpi、drawable-ldpi三個目錄中有同一張圖片資源的不同密度表示,那么系統會去載入drawable_mdpi目錄中的資源;
2) 假設drawable-hpdi中有高密度圖片,其他兩個目錄中沒有相應圖片資源,那么系統會去載入drawable-hdpi中的資源,其他同理。
3) 假設drawable-hdpi,drawable-mdpi中有圖片資源,drawable-ldpi中沒有。系統會載入drawable-mdpi中的資源,其它同理。使用最接近的密度級別。
2.1.2 橫屏豎屏文件夾區分
1) drawable
a) drawable-hdpi該圖片即適用於橫屏,也適用於豎屏;
b) drawable-land-hdpi,當屏幕為橫屏。且為高密度時。載入此目錄的資源;
c) drawable-port-hdpi,當屏幕為豎屏,且為高密度時。載入此目錄中的資源。其它同理。
2) layout
在res文件夾下建立layout-port和layout-land兩個文件夾,里面分別放置豎屏和橫屏兩種布局文件。以適應對橫屏豎屏自己主動切換。
2.2 多屏幕適配的4條黃金原則
1) 在layout文件里設置控件尺寸時應採用fill_parent、wrap_content、match_parent和dp。
詳細來說。設置view的屬性android:layout_width和android:layout_height的值時。wrap_content,match_parent或dp比px更好。文字大小應該使用sp來定義。
2) 在程序的代碼中不要出現詳細的像素值。在dimens.xml中定義;
為了使代碼簡單,android內部使用pix為單位表示控件的尺寸,但這是基於當前屏幕基礎上的。為了適應多種屏幕。android建議開發人員不要使用詳細的像素來表示控件尺寸。
3) 不使用AbsoluteLayout(android1.5已廢棄) ,能夠使用RelativeLayout替代;
4) 對不同的屏幕提供合適大小的圖片。
不同大小屏幕用不同大小的圖片,low:medium:high:extra-high圖片大小的比例為3:4:6:8;舉例來說,對於中等密度(medium)的屏幕你的圖片像素大小為48×48。那么低密度(low)屏幕的圖片大小應為36×36,高(high)的為72×72。extra-high為96×96。
2.3 使用9-patch PNG圖片
使用圖片資源時,假設出現拉伸,由於圖片處理的原因。會變形。導致界面走形。9-patch PNG圖片也是一種標准的PGN圖片,在原生PNG圖片四周空出一個像素間隔,用來標識PNG圖片中哪些部分能夠拉伸、哪些不能夠拉伸、背景上的邊框位置等。
“上、左”定義可拉伸區域
“右、下”定義顯示區域,假設用到完整填充的背景圖。建議不要通過android:padding來設置邊距,而是通過9-patch方式來定義。
Android SDK中提供了編輯9-Patch圖片的工具,在tools文件夾下draw9patch.bat,可以立馬看到編輯后的拉伸效果,也可以直接用其它圖片編輯工具編輯,可是看不到效果。
2.4 不同的layout
Android手機屏幕大小不一,有480x320, 640x360, 800x480……
如何才干讓Application自己主動適應不同的屏幕呢?
事實上非常easy。僅僅須要在res文件夾下創建不同的layout文件夾,比方:layout-640x360、layout-800x480……全部的layout文件在編譯之后都會寫入R.java里,而系統會依據屏幕的大小自己選擇合適的layout進行使用。
總結:最好在mainifest里面加入
<!--對於非常高的分辨率,除採用對應的圖片外,還須要加上例如以下配置,來更好的適配屏幕 -->
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
in
表示英寸,是屏幕的物理尺寸。
每英寸等於2.54厘米。比如我們常常說的手機屏幕大小有,5(英)寸、4(英)寸就是指這個單位。這些尺寸是屏幕的對角線長度。假設手機的屏幕是4英寸,表示手機的屏幕(可視區域)對角線長度是4 X 2.54 = 10.16厘米
dpi
dpi是Dots Per Inch的縮寫, 每英寸點數,即每英寸包括像素個數。比方320X480分辨率的手機,寬2英寸。高3英寸, 每英寸包括的像素點的數量為320/2=160dpi(橫向)或480/3=160dpi(縱向),160就是這部手機的dpi,橫向和縱向的這個值都是同樣的。原因是大部分手機屏幕使用正方形的像素點。
density
屏幕密度,density和dpi的關系為 density = dpi/160
dp
也即dip,設備獨立像素,device independent pixels的縮寫,Android特有的單位,在屏幕密度dpi = 160屏幕上,1dp = 1px。
sp
和dp非常類似。一般用來設置字體大小。和dp的差別是它能夠依據用戶的字體大小偏好來縮放。
Android Drawable
我們新建一個Android項目后應該能夠看到非常多drawable目錄。分別相應不同的dpi
drawable-ldpi (dpi=120, density=0.75)
drawable-mdpi (dpi=160, density=1)
drawable-hdpi (dpi=240, density=1.5)
drawable-xhdpi (dpi=320, density=2)
drawable-xxhdpi (dpi=480, density=3)
市面上的一些Android教程大多都是教的是為每種dpi都出一套圖片資源,這個固然是一種解決的方法。但同一時候也是一種非常笨的方法,為美工或者設計添加了不少的工作量不說。同一時候也會讓你的apk包變的非常大。那么有沒有什么好的方法既能保證屏幕適配,又能夠最小占用設計資源,同一時候最好又僅僅使用一套dpi的圖片資源呢?
首先必須清晰一個自己主動渲染的概念,Android SDK會自己主動屏幕尺寸選擇相應的資源文件進行渲染。如SDK檢測到你手機dpi是160的話會優先到drawable-mdpi目錄下找相應的圖片資源,注意僅僅是優先。假設你手機dpi是160,可是你僅僅在xhpdi目錄下有相應的圖片資源文件。程序一樣能夠正常執行。
所以理論上來說僅僅須要提供一種規格的圖片資源就ok了,假設僅僅提供ldpi規格的圖片。對於大分辨率的手機假設把圖片放大就會不清晰,所以須要提供一套你須要支持的最大dpi的圖片。這樣即使用戶的手機分辨率非常小,這樣圖片縮小依舊非常清晰。
xhdpi成為首選
上面說了僅僅須要提供一套大的dpi的圖片就ok了,如今市面手機分辨率最大可達到1080X1920的分辨率。如Nexus5。dpi屬於xxhdpi,可是畢竟還沒普及,眼下市面上最普遍的高端機的分辨率還多集中在720X1080范圍,也就是多集中在xhdpi。所以眼下來看xhpdi規格的圖片成為了首選。當然隨着技術規格的提高以后發展,以后可能市場上xxdpi的手機會越來越普遍。但這是后話。 設計資源緊張怎么辦?
在如今的App開發中,基本都會有iOS和Android版本號。有些公司為了保持App不同版本號的體驗交互一致。還有些公司的設計資源可能比較緊張。這些情況下iOS和Android版本號基本是一個設計師主導,而大多數情況下設計師可能更會以iPhone手機為基礎進行設計,包含后期的切圖之類的。這個時候身為Android開發者你是否還要求設計師單獨為Android端切一套圖片資源呢?這會讓你們的設計師崩潰的。以下就來告訴一個項目中總結的更棒的方法。
相信設計師們一般都會用最新的iPhone5(5s和5的尺寸以及分辨率都一樣)來做原型設計,而iPhone5的屏幕分辨率為640X1164, 屏幕尺寸為4英寸。依據勾股定理(a^2 + b^2 = c^2)640^2+1164^2=1764496, 然后那么其根源,可以得到屏幕對角線,分辨率:1328,除以4可以得出iphone5的dpi:1328/4≈332 如可以看到的iPhone5屏幕dpi約等於320, 只屬於xhdpi,所以你說有沒有專門為設計師,你可以很自豪Android結束切圖,直接到iPhone一個切圖像資源進drawable-xhdpi目錄里ok該。
