Qml在Android端打开输入法时顶出UI问题

给你三张图自己体会!

Qml在Android端打开输入法时顶出UI问题_第1张图片 Qml在Android端打开输入法时顶出UI问题_第2张图片 Qml在Android端打开输入法时顶出UI问题_第3张图片

 

 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   //获取输入法高度
		}
	}

}

 

你可能感兴趣的:(Qt,Qml)