直接描述我的效果和具体实现,至于其他做法为什么行或者为什么不行,在此不做讨论;
效果图:
软键盘隐藏的时候
软键盘显示的时候
实现思路:
不管界面上是什么布局,只要能获取到对应的实例,都能对他进行操作,我这里标题是ToolBar,下面消息列表是RecycleView和一个RelativeLayout,ToolBar下面整个在一个大的RelativeLayout里面,既然要保持ToolBar在顶部,又要输入框正常弹起显示,故我们直接就对大的RelativeLayout操作,软件盘弹起后,监控软键盘的高度,对大的RelativeLayout显示进行压缩,由于RecyclerView的可滑动性,故相当于对RecyclerView进行了压缩,压缩就是重新设置控件的高度,当软键盘隐藏时,监听到软键盘的变化,再次设置大的RelativeLayout的高度,回复原样。监控软键盘的高度使用ViewTreeObserver类(对于这个类的详细就不说了),这里使用该类里的OnGlobalLayoutListener监听器来监听软键盘的显示与隐藏。
上代码:
(部分代码已删除,仅保留主要思想的代码)
import android.Manifest;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;