1. 程式人生 > >螢幕適配(劉海屏、18:9螢幕尺寸、隱藏SystemUI)

螢幕適配(劉海屏、18:9螢幕尺寸、隱藏SystemUI)

  • 劉海屏

薩瑞劉海屏API介面    <meta-data android:name="android.compatible_notch" android:value="true"/>

參考:https://developer.huawei.com/consumer/cn/devservice/doc/50114?from=timeline

  • 18:9螢幕尺寸

<application android:resizeableActivity="true">

</application>

試了下,確實可以用,但是這個屬性卻是分屏操作的屬性,雖然解決了這個問題,但是分屏操作卻開了,適配還是個問題,所以慎用.

三星S8剛出沒多久,Android Developers Blog 很快就出了一篇文章:Update your app to take advantage of the larger aspect ratio on new Android flagship devices

  • 隱藏SYSTEMUI:

 WindowManager mWindowManager = (WindowManager)this.mContext.getSystemService(this.mContext.WINDOW_SERVICE); 
 WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
 wmParams.format = PixelFormat.RGBA_8888;    
 //如果設定為:
 wmParams.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.INVISIBLE | View.SYSTEM_UI_FLAG_FULLSCREEN;
 wmParams.type = WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL|WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
這樣可以暫時隱藏,但是當有使用者互動點選螢幕的時候,導航鍵就又顯示出來了。

我們來看下原始碼裡面關於SYSTEM_UI_FLAG_FULLSCREEN和SYSTEM_UI_FLAG_HIDE_NAVIGATION的註釋
There is a limitation: because navigation controls are so important, the least user
     * interaction will cause them to reappear immediately.  When this happens, both
     * this flag and {@link #SYSTEM_UI_FLAG_FULLSCREEN} will be cleared automatically,
     * so that both elements reappear at the same time.
     *
     * @see #setSystemUiVisibility(int)
     */
    public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 0x00000002;

android系統有一個限制:因為navigation的控制是很重要的,使用者互動會讓它們又重新顯示出來,這個時候我們設定的SYSTEM_UI_FLAG_FULLSCREEN 和SYSTEM_UI_FLAG_HIDE_NAVIGATION都會自動被清除掉,所以虛擬鍵又會重新出現。

redmine119459 

Google從KK開始增加了狀態列透明以及全屏介面有通知可以下拉狀態列的設計,而這個設計出現的隱患是設定了FULL_SCREEN的介面是無法禁止狀態列下拉的,這樣對一些工程測試app可能會造成一定的影響,但是以google預設的設計,應用端無法修改此設計來滿足自己的需求。
MTK 內部已經開發提供新的介面來實現全屏介面禁止下拉狀態列

http://192.168.3.79:8084/gitweb?p=O1_MP2/alps-release-o1.mp2-default.git;a=commitdiff;h=867ab6a7c359d01ac015c9b4c62f86529c5dab43

alps/frameworks/base/core/java/android/view/View.java          
alps/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java          
alps/packages/apps/FactoryDevelopX/src/com/example/factorydevelopx/MainActivity.java