Android 適配問題:點擊這里? (很詳細)
總結:
px:手機的分辨率,即像素的個數
dp/dip:密度無關像素
dpi: 像素密度,即每英寸像素的個數
以320*480手機像素,160dpi的像素密度為基準,此時的1dp=1px,則此時的手機寬高為320dp*480dp(手機的寬高都以dp作為單位) 。
標準的其他像素的手機,如240×160等,其1dp=0.75px,則其寬高也為320dp*480dp。此時當手機像素不同時,用dp可以作為適配的方法,即手機寬高一致時可以用dp適配。
注:有一個320*480手機像素,但120dpi的像素密度,則此時手機的寬高為(320/0.75)dp*(480/0.75)dp,寬高不是原來的了,此時用dp不能作適配的方法。或者有一個相同像素密度但分辨率不同的手機,此時dp也不能作適配了。即手機的寬高不一致時不能用dp為單位。
解決方法:以320×160像素為基準,將其長分成320份,每份為1px,寬也是這樣,定義在dimens文件中,如<dimens name="x1">1.0px</dimens>(放在values-320*160),那么其他像素如480*320則定義<dimens name="x1">1.5px</dimens>(放在values-480*320),
計算可以用一個工具:點擊這里?
命令如下:java -jar 文件名.jar 基準寬 基準高 額外支持尺寸1的寬,額外支持尺寸1的高_額外支持尺寸2的寬,額外支持尺寸2的高
弊端:每一個像素都要有不同的文件,要有默認的values文件下,因為對于沒有生成對應分辨率文件的手機,里面采用dp為單位,則還是有可能有問題
圖片適配的問題:采用nine-patch .9圖自制圖片達到好的拉伸效果;把最大分辨率xxhdpi的圖片做好,則其他小分辨率Android會自動加載并且進行收縮,如果只有小分辨率的則大的無法拉伸
不同屏幕大小給予不同的layout文件(主要是單面板和雙面板):一般來說可以直接在layout_ sw650dp等文件下分別建立相應的同名.xml文件。
存在問題:名字一樣,后期維護不方便,可以用"布局別名",res/values/layout,res/values-sw600dp-land/layouts.xml 下建立.xml文件,在代碼中可以引用main作為代替,檢測到不同的屏幕時則加載不同的layout文件,layout文件只存在于res/layout中,兩個屏幕就有兩個.xml文件
<item name="main" type="layout">@layout/one </item>
注:主要用到fragment碎片,當fragment碎片兩個屏幕會重復使用時,如一個新聞的App,則可以在其中判斷是否有其他布局從而判斷了處于哪個屏幕,進行不同的操作。