Qml在Android端打開輸入法時頂出UI問題

給你三張圖自己體會!

 

 mainlayout是最外層佈局,代碼寫的太多,往外摘東西不好摘,就把主要代碼複製了一下,大家試着理解一下,代碼很簡單,就是在輸入框上層用MouseArea做一個遮罩檔住輸入框,目的是點的時候不讓輸入框獲取到焦點還能把事件攔截下來,然後上移主佈局,上移的高度是輸入法的高度,最後禁用遮罩,設置輸入框焦點完工

這裏有個問題,就是如果輸入法從來沒彈出來過,那輸入法的高度是不知道的,也就是說這種方法其實並不完美,第一次的時候還是會頂出UI,但只限於第一次,這個問題暫時不搞,時間緊任務重,不能把生命浪費在這種地方,過完今天離死就又近一天,真可怕!

 

 

property double keyheight : 0   //輸入法高度

TextArea{
	id:messageField
	//輸入框遮罩,解決輸入法整體上移問題
	MouseArea{
		id:inputMask
		anchors.fill: parent
		onClicked: {
			mainlayout.y = 0 - keyheight    //上移一個輸入法的高度
			inputMask.enabled = false       //禁用當前遮罩
			messageField.forceActiveFocus() //設置輸入框焦點
		}
	}
}


Connections{
	target: Qt.inputMethod

	onVisibleChanged : {    //顯沒顯示
		if(Qt.inputMethod.visible === false){   //輸入法落下去了
			mainlayout.y = 0
			inputMask.enabled = true
		}
	}

	onKeyboardRectangleChanged: {   //輸入法大小改變
		if(keyheight === 0){
			keyheight = Qt.inputMethod.keyboardRectangle.height / Screen.devicePixelRatio   //獲取輸入法高度
		}
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章