版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html
全面屏是手機業界對於超高屏佔比手機設計的一個寬泛的定義。從字面上解釋就是,手機的正面所有都是屏幕,四個邊框位置都是採用無邊框設計,追求接近100%的屏佔比。但受限於目前的技術,還不能作到手機正面屏佔比100%的手機。如今業內所說的全面屏手機是指真實屏佔比能夠達到80%以上,擁有超窄邊框設計的手機。android
全面屏手機屏幕的寬高比例比較特殊,再也不是之前的16:9了。好比三星的Galaxy S8屏幕分辨率是:2960×1440,對應的屏幕比例爲:18.5:9。VIVO X20手機屏幕分辨率是2160x1080,對應的屏幕比例:18:9。對於這種奇葩的屏幕比例,APP開發者該如何去優化本身的應用,才能在這些手機上顯示的更加完美呢?下面,從如下方面來探究APP完美適配全面屏手機的方法。app
1、聲明最大屏幕高寬比(解決黑邊問題)佈局
2、啓動頁適配優化
3、虛擬導航鍵(Navigation Bar)優化spa
這裏簡單介紹下聲明最大屏幕高寬比、啓動頁適配。.net
因爲全面屏手機的高寬比比以前大,若是不適配的話,Android默認爲最大的寬高比是1.86,小於全面屏手機的寬高比,所以,在全面屏手機上打開部分App時,上下就會留有空間,顯示爲黑條。這樣很是影響視覺體驗,另外全面屏提供的額外空間也沒有得以利用,所以,這樣的應用須要作相關適配。設計
注意:targetSdkVersion==24(Android7.0)及以上默認支持了分屏模式,即Manifest文件中配置Activity的android:resizeableActivity默認屬性爲true,在這種狀況下並不須要配置android.max_aspect比例值便可自動適配全面屏。若是因爲某些緣由(UI適配等)禁止了分屏模式,這個時候就要注意了!須要用到上面的代碼,不然將出現上下黑條的顯示效果,奇醜無比!3d
因此,對於下面的狀況須要考慮適配!code
目前有兩種解決方案:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cn.cctvnews"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/TranslucentTheme"> <!--適配19:9全面屏黑邊問題:https://blog.csdn.net/darkeet/article/details/80049913--> <!--https://blog.csdn.net/weelyy/article/details/79284332--> <meta-data android:name="android.max_aspect" android:value="2.2"/> <!-- 首頁界面 --> <activity android:name=".activity.MainActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
在targetSdkVersion==24(Android 7.0)以上Google默認支持了分屏模式,即Manifest文件中配置Activity的android:resizeableActivity默認屬性爲true。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.why.project.androidstartingwindowdemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:resizeableActivity="true"> <!--首頁--> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
在作啓動優化,解決冷啓動白屏的時候,咱們每每會爲要啓動的Activity設置主題爲一張背景圖。參考《Android APP應用啓動頁白屏(StartingWindow)優化》
那麼問題就來了,以往16:9的的背景圖在18:9的屏幕中會有什麼表現呢?答案是會被拉伸變形。
解決方案有如下幾種方案:
在歡迎界面的佈局文件中採用相對佈局的方式,能夠理解爲將以前完整的一個背景圖拆分紅幾個小圖,而後組合在一塊兒。這樣必定程度上避免拉伸。
保留背景圖完整,在此基礎上經過Android Studio製做.9圖。
這裏簡單介紹下實現步驟,首先,以《Android APP應用啓動頁白屏(StartingWindow)優化》爲例,在適配前看下運行在全面屏上的效果:
注意:擴展名必定要.png,而且圖片不能作壓縮處理。不然有可能建立不成功。
.9.png圖片的用處能夠歸納爲如下兩點:
.9.png圖片和普通圖片相比較,周圍會有一條黑色的線條,這些黑色線條有什麼做用呢?就是用於指定咱們背景的拉伸區域或者前景內容的顯示區域。
----摘自《Android設計中的.9.png圖片》
那麼,對於startingwindow_bg.png這張圖片來說,咱們只須要設置左邊和上邊的拉伸區域便可。好比,咱們想要作成下面的效果(左側的圖應該是合適的,有時候右邊圖也是能夠的,根據實際狀況處理):
首先,因爲圖片很大,因此須要放大比例才能夠準肯定位到邊界,隨便畫出一條黑線出來
而後,縮小到原圖,選中show patches,鼠標定位到區域的邊界進行拖動調整
以此類推,分別畫出左邊和上邊的黑線。
運行效果以下: