標籤:state ram instance 建立 檔案中 out 螢幕 失敗 err
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() ,代碼如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
其實什麼都沒有,就是一句話的事,然後程式就自動全屏了,狀態列也透明了,效果如:
這種方式是我在 Android 開發人員部落格上偷來的,感覺都是 Andoid 開發,都差不多,問我為什嗎? 母雞~~~這個方式我想想其實和設定 style 是一樣的道理,至於為什麼我設定 style 失敗,不清楚,諸位可以自己試試,如果成功,就可以不用添加 Java 檔案了,挺好的....
最後,這個東西其實不叫沈浸式狀態列,沈浸式其實是那種全屏遊戲的那種,整個螢幕都是視窗的那種,這個叫法都是因為人云亦云,官方沒有給出確切的名稱,開發人員就隨便取的名字,不過,不重要了,雞蛋好吃,沒必要知道母雞的名字,更沒必要知道這個蛋排行老幾~~~
對這個東西還有問題的老鐵,可以留言,我會看到會及時回複,就這樣,Bye~~~
Qt 5.9 for Android 實現沈浸式狀態列