全面屏適配以及啓動頁適配(採用製做.9圖的方式)

版權聲明:本文爲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

1、聲明最大屏幕高寬比(解決黑邊問題)

  因爲全面屏手機的高寬比比以前大,若是不適配的話,Android默認爲最大的寬高比是1.86,小於全面屏手機的寬高比,所以,在全面屏手機上打開部分App時,上下就會留有空間,顯示爲黑條。這樣很是影響視覺體驗,另外全面屏提供的額外空間也沒有得以利用,所以,這樣的應用須要作相關適配。設計

注意:targetSdkVersion==24(Android7.0)及以上默認支持了分屏模式,即Manifest文件中配置Activity的android:resizeableActivity默認屬性爲true,在這種狀況下並不須要配置android.max_aspect比例值便可自動適配全面屏。若是因爲某些緣由(UI適配等)禁止了分屏模式,這個時候就要注意了!須要用到上面的代碼,不然將出現上下黑條的顯示效果,奇醜無比!3d

因此,對於下面的狀況須要考慮適配!code

  • targetSdkVersion < 24
  • targetSdkVersion >= 24,可是禁用了分屏模式

  目前有兩種解決方案:

方案一、提升App所支持的最大屏幕縱橫比(設置android.max_aspect比例值)

  在應用配置文件AndroidManifest.xml中顯式聲明支持的最大屏幕高寬比(maximum aspect ratio)。其中 ratio_float 爲高寬比:
  傳統屏幕:ratio_float = 16/9 = 1.778 ;
  三星S8屏幕:ratio_float = 18.5/9 = 2.056。
  紅米6pro屏幕:ratio_float = 19/9 = 2.111。
  鑑於目前全面屏屏幕比例,將ratio_float設置爲2.2便可適配一衆全面屏手機。
<?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>

方案二、支持分屏模式(設置resizeableActivity屬性值

在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>

2、啓動頁適配

在作啓動優化,解決冷啓動白屏的時候,咱們每每會爲要啓動的Activity設置主題爲一張背景圖。參考《Android APP應用啓動頁白屏(StartingWindow)優化

那麼問題就來了,以往16:9的的背景圖在18:9的屏幕中會有什麼表現呢?答案是會被拉伸變形。

解決方案有如下幾種方案:

方案一、針對全面屏製做獨立的圖片資源

考慮到目前大部分全面屏手機只是在高度上拉長,且大多爲6.0英寸左右,像素密度對比xxhdpi並無多大區別,那咱們能夠在項目中增長一組資源drawable-xxhdpi-2160x1080 、drawable-long 這樣解決圖片的拉伸問題。

方案二、採用相對佈局

在歡迎界面的佈局文件中採用相對佈局的方式,能夠理解爲將以前完整的一個背景圖拆分紅幾個小圖,而後組合在一塊兒。這樣必定程度上避免拉伸。

方案三、製做.9圖

保留背景圖完整,在此基礎上經過Android Studio製做.9圖。

這裏簡單介紹下實現步驟,首先,以《Android APP應用啓動頁白屏(StartingWindow)優化》爲例,在適配前看下運行在全面屏上的效果:

步驟一、將背景圖的png文件複製到項目中,好比demo中的startingwindow_bg.png文件

注意:擴展名必定要.png,而且圖片不能作壓縮處理。不然有可能建立不成功。

步驟二、鼠標選中這個文件——右鍵——Create 9-Patch file...

步驟三、保存新建的.9圖,若是不更改目錄的話,直接點擊OK

步驟四、打開.9圖,設置4條邊的屬性

.9.png圖片的用處能夠歸納爲如下兩點:

  • .9.png圖片在圖片拉伸的時候特定的區域不會發生圖片失真;
  • .9.png圖片做爲背景圖的時候能夠指定內容顯示區域;

 .9.png圖片和普通圖片相比較,周圍會有一條黑色的線條,這些黑色線條有什麼做用呢?就是用於指定咱們背景的拉伸區域或者前景內容的顯示區域。

  • 左邊黑線:縱向拉伸區域,必需要畫的,控制縱向拉伸,如上圖右側第一個小圖。
  • 上邊黑線:橫向拉伸區域,必需要畫的,控制橫向拉伸,如上圖右側第二個小圖。
  • 右邊黑線:可選,縱向內容顯示區域
  • 下邊黑線:可選,橫向內容顯示區域

----摘自《Android設計中的.9.png圖片

那麼,對於startingwindow_bg.png這張圖片來說,咱們只須要設置左邊和上邊的拉伸區域便可。好比,咱們想要作成下面的效果(左側的圖應該是合適的,有時候右邊圖也是能夠的,根據實際狀況處理):

                            

首先,因爲圖片很大,因此須要放大比例才能夠準肯定位到邊界,隨便畫出一條黑線出來

而後,縮小到原圖,選中show patches,鼠標定位到區域的邊界進行拖動調整

以此類推,分別畫出左邊和上邊的黑線。

步驟五、刪除startingwindow_bg.png文件,只保留startingwindow_bg.9.png文件

運行效果以下:

參考資料

Android手機 全面屏(18:9屏幕)適配指南

適配18:9全面屏黑邊問題

Android APP適配全面屏手機的技術要點

Android Studio製做.9.png圖片

Android設計中的.9.png圖片

相關文章
相關標籤/搜索