【原】Android中解决ActivityGroup+ViewPaper弹出输入法造成的布局混乱 - 紫夜
【原】Android中解决ActivityGroup+ViewPaper弹出输入法造成的布局混乱
问题描述:
在使用ActivityGroup+ViewPaper方式制作可滑动的选项卡时,出现了点击文本框弹出输入法时,页面布局出现混乱的问题,如图所示:
选项卡上有五个项,电梯、气瓶、人员、信息和更多。在底端展示。点击文本框获得焦点时,
底端的选项卡被输入法顶了上来。直接挡住了焦点输入框。无法正常输入。
解决过程:
乍看问题实在无从入手,输入法把控件顶起来的情况并不多。度娘搜索更是没有相关案例。下面进行排查:
- 从电梯和气瓶两个选项卡页面进入不会出现这个情况。起初考虑是否因为该页面有两个输入框导致,删除一个后,问题依旧,排除。
- 将气瓶的页面布局放入这里,同样出问题,排除布局文件原因。
- 保持人员的布局,将气瓶业务代码考入,无果,排除后台代码的原因。
- 将电梯或气瓶两个选项卡的页面放入人员这个页面,问题依旧,也就是说不是整个人员模块的问题。
问题进入瓶颈,不是人员模块的原因,但偏偏就是在人员这里加载才出现问题,思考半天,想起搭建整个选项卡布局时看到的一句话,ViewPaper会预先加载当前选项卡以及前一个和后一个选项卡的内容。奔着这句话,测试将人员后一项信息的页面换成气瓶的页面,重新进入人员,问题解决,布局不再出现问题。再进入信息页面,问题又出现,这时候可以肯定一个原因,电梯和气瓶因为右边都不是类似信息的页面,所以不出现问题,人员的后一个页面是信息页面,导致出现问题。
这时候终于把问题的焦点放在信息页面。他的布局和后面的更多类似,跟前三个布局大为不同。但是他们的布局为什么会影响前面的页面布局。继续排查,
通过删除信息页面的各个控件,终于发现ScrollView删除时,问题得到根本解决。但是删除一个控件这个页面无法正常显示了。
再一次百度,得知ScrollView在和一些控件使用,弹出输入法时可能会导致页面的布局出现异常。解决办法是屏蔽滚动条。懵了一下,原来布局混乱和滚动条有关,在ScrollView属性中增加android:scrollbars=”none”一句,最终问题得到根本的解决。
遗留思索:
经查找没有合理解释的是:ScrollView有时会影响页面输入法弹出导致布局出现问题,把它当做经验记下了,也许Android SDK在以后的更新中会得以解决。
总结:
很多问题网上不会有恰巧的解决方案,也许你就是第一个发现者。一开始谁也不会想到另一个页面的布局混乱是由其他页面的一个属性值的作用。举一反三,如果有类似这样的问题,也可以考虑是不是这种原因。解决问题需要从现象入手,一步步排查,看到问题本质东西,结合网上的资料,哪怕是一句不起眼的话,都可能给你解决问题找到灵感,将抽象的表面实体化,最终获得问题的解决方法,这是一个受益匪浅的经验。