对于做过表情与输入法切换的就应该知道,它们之间正常切换的话会存在对话框掉下去的情况。如果不知道可以去对比易信的表情界面与输入法的切换,跟微信的表情界面与输入法切换的区别,明显效果不可同日而语。
废话不多说。来讲讲微信是怎么实现的,先看图:
图片分为1与2两个区域,1区域我们称之为输入框区域,2区域称之为表情界面区域。那么像微信在输入法正常高度的情况下,切换表情界面与输入法,1区域完全高度保持不变。那么首先我们需要获取输入法的高度,我这里给出一种方法,就是输入法出现时,我们的界面会弹上去,那么原来的这个最外层rootview的高度与新的高度就是输入法的高度,可以通过rootView.getViewTreeObserver().addOnGlobalLayoutListener来监听改变。
那么得到输入法的高度后,我们就可以根据高度来改变表情界面的高度跟布局了。接下来就只要保证区域1位置保持不变就可以了。比如现在处于上方的情况,表情界面存在,将要切换输入法界面。那么当输入法界面真正出来的时候,势必会改变rootview的高度,我们只需在右切换动作的情况下,去监听onMearsure()方法,输入法出现的时候,会重新来测量的。发现又出现一个输入法高度,就可以将表情界面隐藏了,设置为GONE。检测谁它测,测完它需要onLayout,设为GONE的onLayout不会占空间了。所以刚好与输入法那里补充,这边消失,那边出现。
ok,过程差不多就是这样,有机会展示代码。