Galaxy S8及S8+分別搭載“5.8”與“6.2”大屏,高達84%的屏幕占比為Galaxy S8及S8+在游戲娛樂、觀看視頻時帶來深度沉浸式視覺體驗。但是與此同時S8卻有著一個奇葩的屏幕比例:18.5比9,屏幕分辨率:2960×1440。通常我們在開發過程中android的標準設計圖為1920×1080,ios為1334×750,默認采用16比9的比例來設計效果圖。android機型眾多,分辨率千奇百怪,這回三星又來添亂了,實際開發過程中還真遇到了三星S8的適配問題。
先來看一些案例:
這是適配前的王者農藥
這是適配后的王者農藥
再來看看豎屏的效果:
這是未適配的網易新聞
這是適配過了的今日頭條
所以從案例可以看出來,如果不去做適配的話,屏幕的兩端就會留有黑邊,相當討厭,真機體驗是醬紫的,大家可以感受下:
甚至據說這上下感人的大黑邊逼死了處女座。
其實解決APP顯示問題,除了第三方應用自行適配S8之外,S8自己也可以進行調節,S8有一個功能叫做“全屏應用程序”;通過設置“全屏應用程序”既節省了用戶等待應用適配的過程,也大大增加了用戶體驗。
打開全屏應用之后,效果顯而易見:
無奈Android手機就是這樣,不是太省心,用戶要有點小智商才行,還是iphone比較省心,但是大部分人應該還是跟上面那位處女座一樣的,我們不能要求每個用戶都去手動打開全屏應用來適配APP顯示,作為開發者我們還是要主動去做好適配。
下面我們以開發者的身份去分析下這個問題,究其根本這個適配不過是個顯示的問題,我們只需要讓APP充滿全屏就可以,所以我做了如下嘗試:
1:給Activity設置各種noTitlebar,FullScreen,不起作用;
2:替換各種style樣式,不起作用;
3:修改targetSdkVersion, compileSdkVersion為高版本,依然不起作用。
通過觀察發現,凡是完美適配了18.5比9屏幕的App,在系統中已經默認是全屏應用程序了,選擇框灰掉無法點擊。
而沒有做好適配的App默認是沒有打開全屏應用的,用戶可以自行隨意選擇打開或者關閉,從截圖我們看出很多大廠出品的App還沒有做好適配
所以判斷系統應該是通過檢測某個屬性或者權限來區分當前App是否做好了適配。最后我們找到了"android.max_aspect"這個屬性。
開發者只需在App的AndroidManifest.xml文件<application> </application>中添加如下代碼:
<meta-data android:name="android.max_aspect" android:value="2.1" />
對只要這一行代碼就搞定三星S8的適配,所以前面都是廢話,你要的代碼就這一行,快快粘貼復制到你的代碼中吧。
Android 標準接口中,支持應用聲明其支持的最大屏幕高寬比(maximum aspect ratio)。具體聲明如下,其中的 ratio_float 被定義為是高除以寬,以16:9為例,ratio_float = 16/9 = 1.778 (18.5:9則為2.056)。
<meta-data android:name="android.max_aspect"
android:value="ratio_float" />
若開發者沒有聲明該屬性,ratio_float 的默認值為1.86,小于2.056,因此這類應用在三星S8上,默認不會全屏顯示,屏幕兩邊會留黑。