安卓螢幕適配的方案
首先在開發者我們要養成一個良好的開發習慣,遵循一些好的螢幕適配原則:
開發前部分階段:比如儘量不用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);
int whdth = dm.widthPixels;//獲取螢幕寬度
int height = dm.heightPixels;//獲取螢幕高度
螢幕適配要根據不同的需求,不同的問題進行選擇不同的解決方法
相關文章
- Flutter螢幕適配Flutter
- UIWebView 適配螢幕UIWebView
- 淺談-web螢幕適配的解決方案Web
- flutter 螢幕尺寸適配 字型大小適配Flutter
- android 螢幕適配Android
- Android 螢幕適配:最全面的解決方案Android
- android螢幕適配的問題Android
- Flutter螢幕適配 - 等比縮放Flutter
- Android 主流螢幕以及適配Android
- Android 螢幕適配工具類Android
- android螢幕適配詳解Android
- 【postcss-px-to-viewport】螢幕適配CSSView
- 極其簡單的Flutter 螢幕適配Flutter
- android螢幕適配三:通過畫素密度適配Android
- Android螢幕適配(理論適配100%機型)Android
- 移動 web 端螢幕適配 – remWebREM
- Android 螢幕適配終結者Android
- H5 分層螢幕適配H5
- Android開發之螢幕適配Android
- Android 螢幕適配最佳實踐Android
- Android螢幕適配方案Android
- Android 螢幕適配方案Android
- 【移動適配】移動Web怎麼做螢幕適配(一)Web
- 【移動適配】移動Web怎麼做螢幕適配(三)Web
- android 今日頭條的螢幕適配理解Android
- 基於rem的螢幕適配方案REM
- Flutter螢幕適配,簡單粗暴的全域性適配方式Flutter
- Android螢幕適配總結和思考Android
- Android技能樹 — 螢幕適配小結Android
- 小豬淺談Android螢幕適配Android
- android 螢幕適配一:通過自定義View的方式實現適配AndroidView
- 適配iOS 11和iPhoneX螢幕適配遇到的一些坑iOSiPhone
- Android螢幕適配方案分析Android
- 藉助HTML5做大螢幕適配的“生意”HTML
- Android螢幕適配前先了解這些Android
- 鴻蒙Banner圖一多適配不同螢幕鴻蒙
- 學習筆記:自適應佈局,多螢幕適配筆記
- [譯] Flutter —— 根據不同螢幕尺寸高效的適配 UIFlutterUI