Unity安卓適配劉海屏(Notch Screen)

程序員真的命苦,各個安卓廠商搞了什麼劉海屏,全面屏,真是苦了程序員,以下是適配過程。

未適配劉海屏的應用截圖:(左邊有黑邊,目前小米和華爲都是這麼處理,也就是將應用右移或左移)

而本次教程的目標就是去除左邊的黑邊。

針對Android 8.0(Android O)

在谷歌的Android P(Android 9.0)推出之前,各個廠商已經開始了劉海屏的應用,所以對於Android 8.0,各個廠商都有自己的一套適配方案。

對於小米:

可以查看小米的官方文檔。如果僅僅讓應用顯示全屏,直接在AndroidManfiest.xml加上meta配置就行,當然只有Android 8的系統才生效,Android9就要根據下面的方式處理。如果需要獲取劉海寬度等等就要根據文檔裏的接口進行讀取。

<meta-data
 android:name="notch.config"
 android:value="portrait|landscape"/>

對於華爲:

華爲的也是AndroidManfiest.xml加上meta配置就行。但是如果要獲取劉海屏寬度等等,也需要根據官方文檔進行讀取。

<meta-data android:name="android.notch_support" android:value="true"/>

以上是針對Android8.0的適配方案,因爲市面上還有很多Android 8.0的手機,所以對於開發者,還是最好加上這兩條配置。下面說下Android 9.0,也就是Android P的谷歌官方適配方案。

針對Android 9.0(Android P)

源生Android開發

對於Android源生開發者,直接按照谷歌官方文檔的方式進行設置即可。可以直接在Style設置,也可以在Activity文件裏進行設置。

Style設置劉海區顯示方式

<style name="ActivityTheme">
      <item name="android:windowLayoutInDisplayCutoutMode">
        shortEdges <!-- default, shortEdges, never -->
      </item>
    </style>

Activity設置方式 

@TargetApi(28)
public static void applyNotchAfterPie(Activity activity) {
	Window window=activity.getWindow();
	window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

	WindowManager.LayoutParams attributes = window.getAttributes();
	attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
	window.setAttributes(attributes);
}

而以上方式對於Unity應用來看,經過測試是無效的。

Unity設置方式

對於Unity來說,很簡單,只要在PlayerSetting勾選上Render outside safe area即可(好像最小的Unity版本需要Unity2018.3),該版本以下可以使用上面介紹的源生Style方法進行設置(未驗證)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章