程序員真的命苦,各個安卓廠商搞了什麼劉海屏,全面屏,真是苦了程序員,以下是適配過程。
未適配劉海屏的應用截圖:(左邊有黑邊,目前小米和華爲都是這麼處理,也就是將應用右移或左移)
而本次教程的目標就是去除左邊的黑邊。
針對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方法進行設置(未驗證)。