输入法导致ExpandableListView的getChildView重绘

来源:互联网 发布:淘宝商城女童鞋 编辑:程序博客网 时间:2024/06/06 11:36

今天写代码的时候遇到个问题,ExpandableListView的分组展开后,里面有edittext,当edittext获取焦点弹起输入法的时候

edittext又失去了焦点,需要重新点击才能做输入,并且在内容修改后收起输入法的时候,edittext的内容再次回到默认值


当时的想法就是,getChildView重绘了,于是debug,发现果然是是


检查代码后发现是因为输入法弹起的时候,整个页面都被顶起来了,而ExpandableListView的高度是match_parent的,父view被压缩,导致了ExpandableListView的高度改变,引发重绘


于是把ExpandableListView的高度设为固定值解决了问题,但是这次弹出输入法的时候ExpandableListView没有被顶起来,输入框被软键盘遮盖


于是把ExpandableListView放到了ScrollView里面,这样输入法弹出的时候,输入框就会一直在输入法上面了



另外,避免输入法覆盖界面输入框的方式有以下三种:

方法一:在你的activity中的oncreate中setContentView之前写上这个代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

方法二:在项目的AndroidManifest.xml文件中界面对应的<activity>里加入android:windowSoftInputMode="stateVisible|adjustResize",这样会让屏幕整体上移。如果加上的是

                android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。

方法三:把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView的封装。这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部。


阅读全文
0 0
原创粉丝点击