Android屏幕適配(4)常見:第三種

前言:
Android屏幕適配(1)基礎(chǔ)知識篇
Android屏幕適配(2)常見:第一種
Android屏幕適配(3)常見:第二種
Android屏幕適配(5)常見:歸納總結(jié)
常見的屏幕配置問題(一些特殊的暫時除外,曲面屏,分屏模式,劉海屏),我歸檔為3種情況來分析一波
1.相同尺寸,不同分辨率屏幕
2.相同分辨率,不同尺寸屏幕
3.不同分辨率,不同尺寸屏幕

場景:
假設(shè)我們現(xiàn)在市面上的手機就只有oppo,vivo以下2款手機
其他的手機廠商和oppo,vivo的其他機型的手機全都洗白了
全世界的人都只有使用用這2款手機
一個oppo,300x400,5寸的手機,賣5000000RMB
一個vivo,600x800,5寸的手機,賣10000000RMB
我現(xiàn)在特別土豪,為了給大家寫這篇帖子
我2個手機都買了
Android屏幕適配(2)常見:第一種
...
100年后,又有一個小米手機廠商出來了,發(fā)布了一款300x400,10寸的手機,10000000RMB
假設(shè)下圖中里面的就是5000000RMB的oppo,外面的就是10000000RMB的小米
Android屏幕適配(3)常見:第二種

這時候我們
相同尺寸,不同分辨率屏幕
相同分辨率,不同尺寸屏幕
都解決了,然而這又有什么卵用?
告訴用戶我們的APP只支持300x400分辨率的手機使用?
還是告訴用戶我們的APP只支持5寸屏幕的手機使用?

第三種情況:不同分辨率,不同尺寸屏幕(任意手機)
只也是我們的終極目的,前面2篇適配只是做一個鋪墊,讓這里講解的時候提到的東西更容易被理解
如果這里分析的還有未分析到的地方歡迎大家提出,一定及時修正

咱們還是先來個特殊的試試水,把300x400,5寸的同時放大2倍600x800,10寸
按慣性思維,這里同時放大2倍,肯定一張圖片會自己也放大2倍,然后就適配了啊

使用PX


1.png

改用DP


1.png

GG了!三板斧劈完了!還是未能解決適配問題!!!
理性分析走一波:
1.PX不行的原因:(參考Android屏幕適配(2)常見:第一種)
PX是像素點單位,就是分辨率單位,不論屏幕尺寸怎么變只要分辨率沒變,它所占的屏幕寬比都是一樣的
也就是說當(dāng)我們在使用PX的情況下,市面上的手機只要跟我們開發(fā)時候的分辨率是一樣的都能適配
寬占比=圖片寬PX/屏幕分辨率寬
分辨率改變
被除數(shù)不變,除數(shù)變,結(jié)果變=圖片寬PX不變,屏幕分辨率寬變,結(jié)果變
所以這里的不同分辨率,不同尺寸屏幕情況是不滿足分辨率相同原則的
所以這里的PX是不行的.

2.DP不行的原因:(參考Android屏幕適配(3)常見:第三種)
注:一下解釋需要一些基礎(chǔ)知識,建議先看Android屏幕適配(1)基礎(chǔ)知識篇再往下看
無論我們開發(fā)中用什么虛擬單位(系統(tǒng)幫我們做了一次適配的單位),怎么個適配,最后顯示在我們屏幕上都是以PX為單位的(構(gòu)成圖像的最小單位)
其實DP這個虛擬單位,最終顯示的時候就是獲取屏幕信息,再根據(jù)自身的算法規(guī)則,幫我們算出來的PX做為單位顯示到屏幕上,但是它的算法已經(jīng)是我們Android固定好了的(算法:規(guī)定以160dpi為基準(zhǔn),1dp=1dip=1px)
好,有了以上了解我們再回頭來分析一下當(dāng)前場景下的DP怎么就不行了

1.png

2.png

以上就是通過DP的固定算法換算PX的過程(PX=DPDesity=DP(DPI/160))
1.根據(jù)公式發(fā)現(xiàn)在同一DP寬度情況下改變PX值的唯一變量就是DPI了
2.結(jié)合以上計算過程,發(fā)現(xiàn)DPI都是100DPI,所以換算出來的PX肯定是相同的,也就是上圖中的93.75PX
3.PX都相同了,那就又回到上面的PX不行的原因了!
所以這里的DP是不行的.

理性分析一波完不行的原因后,總該有點啟發(fā),或者思考方向吧!
整理歸納一下再看看有點啟發(fā)沒有--> 走起(我這里只知道PX跟DP,其他的一概不知道):
1.最終都是以PX顯示到屏幕上
2.Android有一套適配置算法:DP,但是不能全部適配各種情況
3.我如果在開發(fā)的時候使用PX呢.結(jié)果如何? 那肯定就是死敲敲了.已經(jīng)寫死了,再也無法適配了.果斷舍棄
4.有一點肯定的認(rèn)知,在開發(fā)的時候我不能用死單位,還是需要使用虛擬單位,再生成PX的時候能生成我心中想要的PX就好了
5.那我到底需要在什么情況下生成多少PX呢?我也不知道,還是先把這個搞明白了來

就上面這種情況.我想達到的效果是怎么樣的?
5.1占屏寬比在2個屏幕上都要是一樣的,也就是說在300x400,5寸上75PX圖片需要在600x800,10寸上是75PX,占屏寬比都要達到25%,見下圖


1.png

對的,這就是我心中的藍(lán)圖了!
再回到上面DP不能適配的情況看看


image
image

這里的600x800,10寸上也就是說,占屏寬比也能達到:31.25%,跟300x400,5寸上一樣就行了
此時的占屏寬比:31.25%就是圖片PX要達到187.5PX

我:開發(fā)者
你:屏幕
這種情況下.我想做屏幕適配,其實就是我要來巴結(jié)你的節(jié)奏啊!

你說:我告訴你啊.開發(fā)者,在我這里其他的我都不認(rèn)識,我只認(rèn)識PX.你拿一個187.5PX的圖片來.我立馬適配,其他的都不用談了!

我說:大哥你看能不能通融通融.我實在是搞不定了,你給我把93.75PX轉(zhuǎn)成187.5PX把,立馬遞上一根自己都舍不得抽的,原產(chǎn)巴西的大雪茄!

你說:不是我不想.我是做不到.我只負(fù)責(zé)顯示PX.其他的撒都不清楚,給你指條名路.你去求我們領(lǐng)導(dǎo)Android系統(tǒng)

Android系統(tǒng)說:我給屏幕小弟顯示的PX算法都是固定死了的PX=圖片寬DPDesity, Desity=DPI160,不會為你一個人開后門.大家都在這個基礎(chǔ)上做開發(fā).眾生平等!...... 雖然算法是固定死了的.但是我不是要提供限定符(SW)給你們嗎?就是為了解決你們開發(fā)者的這個問題而存在的

我說:好的.我去看看,限定符(SW)(Android屏幕適配(1)基礎(chǔ)知識篇)

結(jié)合SW限定符計算得到:
300x400,5寸屏 的限定符SW=300PX/Desity=300PX/0.625=480
600x800,10寸屏 的限定符SW=600PX/Desity=600PX/0.625=960
所以就是SW480和SW960

下面使用Android官方給我們提供的插件ScreenMatch(具體使用詳情百度一大堆.查一下就明白了)自動給我們生成SWXXX文件


1.png
1.png
1.png

1.png

那么我們帶入進600x800,10寸屏幕中再算一算.是否能實現(xiàn)適配
注:原來的150DP圖片我沒就不直接寫死了.我們用上圖中的R.dimens.dp_150代替,那么現(xiàn)在在600x800,10寸屏上Android系統(tǒng)就很算出來當(dāng)前的SW值=SW960.就會那么就命中values-sw960文件夾,這時的R.dimens.dp_150=300DP
PX=300DPDesity=300DP0.625=187.5PX
再回到
image

image

中占寬比:187.5PX/600PX=31.25%
這不就是完美實現(xiàn)了我們的藍(lán)圖嗎

最后:
有什么理解不到位地方歡迎指正,以上理解均來源與對一些基礎(chǔ)知識概念的理解,未實操證實過!
這種適配基本能解決大多數(shù)問題.還有一些小部分的就要特殊處理了,除了這種適配.還有其他的,以后再補上

建議ScreenMatch還是用base_dp=360,這個值基本兼容大部分屏幕.具體可以拿幾個現(xiàn)目前市面上的手機真是分辨率跟屏幕尺寸算一算.我這里的例子只是舉的特殊了.像SW960這種基本都不存在的.再說說之前留下的問題
提問 : 你這個例子舉得太特殊了如果是300x400,5寸跟500x800,5寸占比就不同了
答:自己算一下SW是多少.生成一個對應(yīng)的SW就行了,其他的任意機型同理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容