編輯:關於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。
啟動屏,據多數 Qter 反映,Qt 安卓應用啟動時,會顯示一個無內容,帶有標題和應用 Icon 的黑色畫面,無法直接預先顯示 SplashScreen。
網絡資源可以通過現有的 C++ 接口進行優化,緩存。但是本地多媒體縮略圖支持,需要自行構建一個好用的。
Qt 對移動平台的網頁支持,應該是試圖通過在 QtSurface
上繪制原生網頁進行支持,所以 Qt 的網頁支持對於移動平台來說是很孱弱的。然後 QtWebEngine 是基於谷歌的 Chromium 的,Chromium 現在對 VS 編譯支持最好,而對 MinGW 的支持隨著 VS 開源,也就自然流產了。
現在 Qt 在手機設備上,使用 QtWebView 也就是在 QtSurface 上繪制原生網頁作為 Qt 在移動端上網頁的解決方案。
QtQuick 中是支持地圖插件的,但是官方只是預制了 here 等幾個國外的地圖插件,百度地圖只能自己去封裝插件。
前言項目中有使用到水印效果,如下圖所示。在實現過程中,最終選用ItemDecoration來實現,其中有兩大步驟:自定義Drawable來完成水印圖片、使用ItemDec
一、對Canvas進行操作對Canvas的一系列操作,是指對Canvas進行旋轉、平移、縮放等操作。這些操作可以讓Canvas對象使用起來更加便捷。二、Canvas平移/
Activity中四大啟動模式 在AndroidManifest.xml中 ,有一個默認的activity 在它裡面可以設置activity啟動模式, android
一、 先看效果二、設置 File->Settings 或Ctrl + Alt +S 找到 Editor -> Colors &Fonts ->