Android 手機應用程序如果不全屏,系統默認的頂部狀態欄的顏色(黑色)會破壞精心設計的 APP 的整體風格和美感,所以,對狀態欄的處理,個人覺得還是很有必要的。
在 Qt 5.9 中,使用 QML聲明式語言, 通過 Screen 對象來獲取到設備的長寬,可以分別獲取到整個設備的長寬和去掉手機頂部狀態欄之后的長寬,可以說非常方便吧,但是,當你設置整個 Windows 對象或者ApplicationWindow 對象的長寬為設備的最大長寬的時候,會發現並不能生效,狀態欄屹立不倒,忘了說了,這個沉浸式狀態欄只有在 Android 4.4 及以上版本才會有效,4.4 以下的根本不支持,所以各位要注意自己的調試設備的系統版本。
我在做這個的時候,在網上搜索了很多博客,有一部分說的是利用 Screen 獲取長寬后全屏,然后,上方放置一個透明的矩形之類的,這個方法在 Qt 5.9 下面沒能成功,因為根本都無法全屏,再者,全屏了之后,狀態欄是會被影藏的,就算你設置了透明也看不到了吧,這個方式 Pass !
第二種是通過 AndroidManifest.xml 設置 style ,先在 android/res 文件夾下添加 style 文件,然后在 AndroidManifest.xml 引用,style 文件里面設置
android:windowTranslucentStatus 屬性為 true,再設置
android:fitsSystemWindows 屬性為 true, 然后就就就就就就就就行了,因為這個已經是在利用 Android 系統本身的東西來設置了,幾乎脫離了 Qt,感覺還是很靠譜的,但是,我還是失敗了。難受...
以上兩種方式,有興趣的朋友可以自己先試試看,也許是我的打開方式不對呢,萬一你就成功了呢!
最后呢,我想到了 JNI ,Android 系統是由 Java 實現的,我直接通過 Java 代碼來實現這個東西,理論上是絕對可行的啊,所以,我建立了 Androidmanifest.xml 之后,添加了我自己編寫的 Java 文件,在文件中,重載了 Android 系統程序的入口函數 onCreate() ,代碼如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().getDecorView().setFitsSystemWindows(true);
}
其實什么都沒有,就是幾句話的事,然后程序就自動全屏了,狀態欄也透明了,效果如下圖:
這種方式是我在 Android 開發者博客上偷來的,感覺都是 Andoid 開發,都差不多,問我為什么? 母雞~~~這個方式我想想其實和設置 style 是一樣的道理,至於為什么我設置 style 失敗,不清楚,諸位可以自己試試,如果成功,就可以不用添加 Java 文件了,挺好的....
還有個問題就是在全屏以后,Qt 就無法獲取到狀態欄的高度了,因為全屏了,然后標題的位置就不好居中了,這是個問題!
最后,這個東西其實不叫沉浸式狀態欄,沉浸式其實是那種全屏游戲的那種,整個屏幕都是窗口的那種,這個叫法都是因為人雲亦雲,官方沒有給出確切的名稱,開發者就隨便取的名字,不過,不重要了,雞蛋好吃,沒必要知道母雞的名字,更沒必要知道這個蛋排行老幾~~~
對這個東西還有問題的老鐵,可以留言,我看到會及時回復,就這樣,Bye~~~