1. 程式人生 > >螢幕適配的幾種常用方法

螢幕適配的幾種常用方法

首先在開發者我們要養成一個良好的開發習慣,遵循一些好的螢幕適配原則:

開發前部分階段:比如儘量不用AbsoluteLayout(絕對佈局),多用線性佈局與相對佈局,設定寬高邊距等尺寸用dp(dip),不要用px。開發除錯選擇主流螢幕(1280*720)

開發後階段:在不同解析度手機(主流的手機解析度和當前市場主流手機)上測試,沒有大問題(不影響使用,比如不同解析度相差一兩個畫素這樣,當然,如果公司要求較  高就必須處理了)就可以釋出上線使用。

出現問題解決方法:

1、圖片適配

該方法不常用,當圖片在不同螢幕手機上出現偏差、失偵等情況,很簡單,讓UI給你多切幾套圖,放在res目錄下的drawable-hdpi、drawable-mdpi、drawable-xhdpi、drawable-xxhdpi、drawable-xxxhdpi,這幾個目錄分別對應不同的螢幕,當不同螢幕啟動App時候會優先去訪問其對應的目錄下的圖片資源,如果對應下面沒有才回去訪問其他的目錄。

2、佈局適配

該方法也不常用,其原理和圖片適配差不多,就是當不同螢幕上同一個佈局檔案不能滿足需求,比如大螢幕需要做特殊顯示這種,此時就在res目錄下新建一個資料夾layout-800x480(適配480*800的螢幕,其他螢幕同樣方法新建即可),然後在裡面去對進行指定的設定佈局檔案了。

3、尺寸適配

這裡先介紹一個概率:裝置密度(dp和px的轉換關係,dp=px/裝置密度);320*240(0.75), 480*320(1),480*800(1.5),1280*720(2)這是主流幾大螢幕對應的裝置密度。

一般在開發者,美工UI給我們的都是PX,我們在設定的時候就不能還自己把PX快取DP這麼簡單了,比如說,美工在1280*720上面切了一套圖,給出的某個控制元件寬100px,那麼此時我們在佈局檔案設定就應該設定為50dp(100/裝置密度);在一些需求中,不同螢幕需要設定不同的尺寸,此時可以新建一個values-(解析度)這樣的目錄,在其下面有一個dimens檔案(在原values下的dimens也要設定),在裡面進行尺寸設定然後再佈局裡面呼叫即可,同樣的道理,手機訪問App當呼叫values裡面的檔案時會優先調優和自己對應的檔案。

還有一點就是我們在程式碼中設定尺寸適合java程式碼預設為px,我們需要用一個工具類進行轉換

dp與px直接轉換的工具類:

public class ScreenSizeAdapter {

	/**
	 * dip轉為 px
	 */
	public static int dip2px(Context context, float dipValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dipValue * scale + 0.5f);
	}

	/**
	 * px 轉為 dip
	 */
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}
}

4、權重適配

線性佈局才能夠設定權重。在LinearLayout屬性設定裡面可以設定總權重android:weightSum;然後在裡面的空間去分配權重,這樣不管在什麼手機,都是按照權重比例來進行顯示的。

5、程式碼適配

程式碼適配類似於權重適配,權重適配可以用程式碼適配來實習,但是程式碼適配就不一定能夠用權重適配來實現,比如相對佈局不能用權重,就可以程式碼來控制。實現原理是:計算螢幕寬高,動態的來設定空間寬高。一般根據比例去計算,比如側滑選單和主介面分別的比例,此時就可以這樣動態去計算

DisplayMetrics dm = new DisplayMetrics();
		activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
<span style="white-space:pre">		</span>int whdth = dm.widthPixels;//獲取螢幕寬度
<span style="white-space:pre">		</span>int height = dm.heightPixels;//獲取螢幕高度
螢幕適配要根據不同的需求,不同的問題進行選擇不同的解決方法