螢幕適配(劉海屏、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 內部已經開發提供新的介面來實現全屏介面禁止下拉狀態列
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