Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Qt for Android 開發大坑

Qt for Android 開發大坑

編輯:關於Android編程

Qt for Android 開發大坑

這裡說一說比較常見的 Qt 開發安卓的大坑。希望同學們不要做無謂的掙扎,跳過這些坑。

輸入框

首當其沖的是輸入框,Qt 的輸入在安卓上表現不佳.

無法支持安卓原生的輸入法訪問 Qt 的輸入框,就是安卓輸入法無法復制,粘貼,剪切 Qt 輸入框中的文本。

無法支持使用觸摸的方式選中 Qt 輸入框中的文字。

如果輸入框的位置處於應用底部,類似於 IM 那種聊天工具,應當注意。

a. 如果應用 Activity 設置為 android:windowSoftInputMode="adjustResize",彈出輸入法時,應用界面就會進行縮放,這個時候,應用界面就會閃爍。

b. 如果應用 Activity 設置為 android:windowSoftInputMode="adjustPan",應用界面的頭部就會被頂出屏幕。

為了修復上訴的問題,參照如下步驟

a. 先設置應用 Activity 設置為 android:windowSoftInputMode="adjustPan",這樣,彈出輸入法時,就不因為界面縮放而閃爍。

b. 獲取到安卓輸入法高度。

c. 修改輸入框,使其被點擊獲取焦點之前,先彈出輸入法(Qt.inputMethod.show()),由於不是輸入框獲取焦點而彈出輸入發,所以界面既不會閃爍,也不會相對屏幕向上位移。(就是在 TextField 上放一個 MouseArea

d. 在輸入法彈出後,就可以獲取鍵盤高度(如果在安卓上獲取鍵盤高度,是需要寫一些 Java 代碼的)。

e. 獲取到鍵盤高度後,直接位移輸入框(延時處理),然後 forceActiveFocus 強制獲取焦點。

上訴解決方案又引發一個問題,且聽我細細道來。

a. 首先 Qt.inputMethod.show() 在安卓上可以直接顯示鍵盤,然後顯示時不會直接縮放界面(造成閃爍)或者將界面頂出屏幕。

b. 接著,輸入框是一個特殊的控件,在輸入框獲取虛擬鍵的焦點後,安卓上的輸入法會直接記住這個控件的位置。

c. 再下一次直接調用 Qt.inputMethod.show() 時,會找到上一次獲取焦點的輸入框的位置,根據這個位置,彈出虛擬鍵破並將界面頂出屏幕,然後輸入框才會拿到鍵盤高度,位移。

為了再解決上訴的問題,還得記錄下安卓上鍵盤的高度,然後根據鍵盤高度決定先使用 Qt.inputMethod.show() 彈出鍵盤,還是先位移輸入框。

TODO

已經具現化的解決方案GDPURJYFS/WellChat,演示視頻安卓修復鍵盤彈出界面不友善問題修復終版Demo。當然現在這些方案都有各種各樣的問題,具體要做的,其實是希望官方修復鍵盤彈出,界面縮放時閃爍的這個問題。

攝像頭

Qt 安卓應用上的攝像頭,如果直接使用 QtMultimedia::Camera 可能會出現無法很好對焦的情況,並且各個機型和不同版本系統上表現不一致,華為手機對 Qt 的支持不佳,問題會稍微多一些。

解決方法:

可以直接通過調用系統的攝像軟件,具體參照QtAndroid詳解(3):startActivity實戰Android拍照功能,具體代碼 A-week-to-develop-android-app-plan/demos/CallNativeCamera。

SplashScreen

啟動屏,據多數 Qter 反映,Qt 安卓應用啟動時,會顯示一個無內容,帶有標題和應用 Icon 的黑色畫面,無法直接預先顯示 SplashScreen。

本地多媒體縮略圖

網絡資源可以通過現有的 C++ 接口進行優化,緩存。但是本地多媒體縮略圖支持,需要自行構建一個好用的。

網頁支持

Qt 對移動平台的網頁支持,應該是試圖通過在 QtSurface 上繪制原生網頁進行支持,所以 Qt 的網頁支持對於移動平台來說是很孱弱的。然後 QtWebEngine 是基於谷歌的 Chromium 的,Chromium 現在對 VS 編譯支持最好,而對 MinGW 的支持隨著 VS 開源,也就自然流產了。

現在 Qt 在手機設備上,使用 QtWebView 也就是在 QtSurface 上繪制原生網頁作為 Qt 在移動端上網頁的解決方案。

本地化地圖

QtQuick 中是支持地圖插件的,但是官方只是預制了 here 等幾個國外的地圖插件,百度地圖只能自己去封裝插件。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved