Qt 5.9 for Android 實現沈浸式狀態列

來源:互聯網
上載者:User

標籤: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 實現沈浸式狀態列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.