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 四捨五入
}
public static 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佈局文件時, 可以在代碼中動態設置寬高