Android螢幕適配(理論適配100%機型)
螢幕適配是我們Android開發,老生常談的問題!
面試官:看你簡歷上寫著熟悉Android螢幕的適配,那就說一說吧
我:
1、我們為什麼要適配?
Android系統是開放的,是開源的,任何使用者,開發者,手機廠商,運營商都可以對Android進行定製,比如小米,華為等等,還有許許多多的工控板,用的也是Android系統。於是乎,導致了執行Android系統的裝置,多種多樣,既然裝置多了,就保不齊它們有著不同的螢幕尺寸,和畫素密度。儘管系統可透過基本的縮放和調整大小功能使介面適應不同螢幕,但Android開發者應做出進一步最佳化,使我們的程式在各類螢幕上更beautiful的顯示出來。
2、關於螢幕的幾個概念
螢幕尺寸: 螢幕尺寸指螢幕的對角線的長度,單位是英寸,1英寸=2.54cm
比如我的小米11Pro的尺寸
螢幕解析度: 螢幕解析度是指在橫縱向上的畫素點數,一般以縱向畫素 橫向畫素,19201080 表示寬度方向有1080個畫素點,高度方向有1920個畫素點,整個螢幕有1920*1080個畫素
單位px 1px=1畫素點
螢幕畫素密度(dpi): 螢幕畫素密度是指每英寸上的畫素點數,單位是dpi,即 dot per inch 的縮寫。螢幕畫素密度與螢幕尺寸和螢幕解析度有關係,在單一變化條件下,螢幕尺寸越小,解析度越高,畫素密度越大
密度型別 | 代表的解析度(px) | 螢幕畫素密度(dpi) |
---|---|---|
低密度(ldpi) | 240x320 | 120 |
中密度(mdpi) | 320x480 | 160 |
高密度(hdpi) | 480x800 | 240 |
超高密度(xhdpi) | 720x1280 | 320 |
超超高密度(xxhdpi) | 1080x1920 | 480 |
解析度是寬×高
密度無關畫素: density-independent pixel ,dp或者dip,就是我們Android開發時用的寬度單位,可以保證在不同螢幕畫素密度的裝置上顯示相同的效果
dp和PX轉換
dpi就是螢幕畫素密度,160這個值是谷歌官方規定的一個值,
規定以160dpi(即螢幕解析度為320x480)為基準:1dp=1px
看以上的資料資料,我們發現,再開發過程中我們去使用dp的話,Android根據螢幕畫素密度去適配了,但是為什麼我們寫出來的頁面還是效果不理想呢!
3、Android螢幕適配 方案
那是因為我們UI在給我們圖的時候螢幕寬度是一個固定值,但是由於Android手機的螢幕的多樣性,螢幕畫素換成dp之後,長度也是多樣性的,所以我們按照UI的尺寸出完效果,效果所以不太理想,為了解決這個問題,我們來更改一下幾個引數值,來達到,我們按照UI給的設計圖尺寸來編寫程式碼,在其他Android裝置上達到一個百分比適配!
以360dp為寬度的設計稿為例子 density的值就是dpi/160
public static void setCustomDensity (Activity activity,final Application application){ final DisplayMetrics appDisplayMetrics =application.getResource().getDisplayMetrics(); final float targetDensity=appDisplayMetrics.widthPixels/360; final int targetDensityDpi=(int)(160*targetDensity); appDisplayMetrics.density=targetDensity; appDisplayMetrics.densityDpi=targetDensity; //Activty 的DisplayMetrics也要設定 final DisplayMetrics activityDisplayMetrics =activity.getResource().getDisplayMetrics(); activityDisplayMetrics.density=targetDensity; activityDisplayMetrics.densityDpi=targetDensity; } 複製程式碼
這樣就能按百分比適配了,螢幕寬度畫素/設計稿尺寸 能把1dp=多少畫素值算出來,也就是density的值,這個值算出來之後,就能算出來360dp的dpi,設定完之後,再按設計稿的尺寸來,就能做到和設計稿百分比適配了
這個就是適配的核心方案,感覺適配大部分裝置效果還是很好的!
作者:被遺忘的涼白開
來源:掘金
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007350/viewspace-2793663/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- android 螢幕適配Android
- flutter 螢幕尺寸適配 字型大小適配Flutter
- Flutter螢幕適配Flutter
- UIWebView 適配螢幕UIWebView
- android螢幕適配三:通過畫素密度適配Android
- Android 主流螢幕以及適配Android
- Android 螢幕適配工具類Android
- android螢幕適配詳解Android
- Android 螢幕適配終結者Android
- Android開發之螢幕適配Android
- android螢幕適配的問題Android
- Android 螢幕適配最佳實踐Android
- 安卓螢幕適配的方案安卓
- Android螢幕適配總結和思考Android
- Android技能樹 — 螢幕適配小結Android
- 小豬淺談Android螢幕適配Android
- android 螢幕適配二:手寫百分比佈局適配Android
- android 螢幕適配一:通過自定義View的方式實現適配AndroidView
- 【移動適配】移動Web怎麼做螢幕適配(一)Web
- 【移動適配】移動Web怎麼做螢幕適配(三)Web
- Android螢幕適配前先了解這些Android
- android 今日頭條的螢幕適配理解Android
- Flutter螢幕適配 - 等比縮放Flutter
- 【postcss-px-to-viewport】螢幕適配CSSView
- Android7.0機型適配Android
- Android 螢幕適配:最全面的解決方案Android
- 移動 web 端螢幕適配 – remWebREM
- H5 分層螢幕適配H5
- Android最全螢幕適配的幾個重要概念(三)Android
- 適配iOS 11和iPhoneX螢幕適配遇到的一些坑iOSiPhone
- 極其簡單的Flutter 螢幕適配Flutter
- Android適配: 拉伸適配的缺點Android
- Flutter螢幕適配,簡單粗暴的全域性適配方式Flutter
- 學習筆記:自適應佈局,多螢幕適配筆記
- 移動APP測試-Android螢幕適配問題(一)APPAndroid
- 移動APP測試:Android螢幕適配問題二APPAndroid
- Android螢幕適配dp、px兩套解決辦法Android
- Android適配Android