標籤:
Android螢幕適配主要有五種方法:圖片適配、布局適配、尺寸適配、權重適配、代碼適配。前兩種不太常用,後三種用的較多。
圖片適配
- 開啟4種解析度的模擬器
- 在drawable的多個目錄下放置內容不同但命名相同的圖片
- 運行程式,查看在不同模擬器上的顯示效果
- 常規做法: 美工只做一套1280*720的圖片,放置在drawable-xhdpi的目錄下, ImageView寬高指定為確定的值, 不包裹螢幕
布局適配
- 針對特定解析度,建立layout檔案夾: layout-800x480, layout-land(表示橫屏)
- 800x480 和其他解析度模擬器對比
- 常規做法: 該方式不到萬不得已,一般不用
尺寸適配
dp和px的關係:dp=px/裝置密度
裝置密度(density)的擷取:
`float density = getResources().getDisplayMetrics().density;
??
根據這個,我們可以寫一個dp互轉px的Util類,代碼如下:
public static int dp2px(Context context,float dp)
{
float density=context.getResources().getDisplayMetrics().density;
return (int) (dp*density+0.5f);//+0.5 四捨五入
}
publicstatic float px2dp(Context context,int px){
float density=context.getResources().getDisplayMetrics().density;
return px/density;
}
??
- 常規裝置密度: 320x240(0.75), 480x320(1), 800x480(1.5), 1280x720(2)
- 設定dp值, 在不同螢幕上查看顯示的比例
- 建立檔案夾values-1280x720, 在dimens.xml中制定尺寸, 適配螢幕
- 常規做法: 美工提供像素px值, 我們使用前需要用px除以裝置密度,轉換成dp後,寫在布局檔案中
當然,使用dp不能解決所有問題,比如800x480(豎屏)和1280x720(橫屏),這種情況就不能只設定一個dp值了,我們可以將一般的值寫在dimens.xml中,同時建立一個values-1280x720檔案夾將1280x720螢幕的dp值寫在這個檔案夾中的dimens.xml裡面。這樣,當遇到1280x720的裝置就會去載入values-1280x720檔案夾中dimens.xml的值。
權重適配
我們知道,只有在LinearLayout布局中,才有layout_weight屬性。這個屬性用來控制LinearLayout布局中各個子組件按照一定比例顯示。一般說來,layout_weight值越大,所佔的比例就越大。計算公式是:某個組件寬度(或高度)占LinearLayout的比例是:本組件weight值 / LinearLayout內所有組件weight值的和。
代碼適配
int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();
tv1.setLayoutParams(new LayoutParams((int)(width*0.5), (int)(height*0.2)));
常規做法: 如果是自訂的控制項, 沒有使用xml布局檔案時, 可以在代碼中動態設定寬高
Android 螢幕適配