在做一个模拟聊天的项目时,将聊天内容呈现在ListView中,想要达到ListView随着item的插入自动滚动,以及在页面下面有一个输入文本,点击输入文本时弹出一个软键盘,希望ListView能在弹出软键盘的自动滚动合适的距离。
只弄出了一个不完善的方法
1.在MainActivity中为填充的的View(activity_main.layout),设置添加布局变化监听addOnLayoutChangeListener
container.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if(oldBottom-bottom>0)
lv.smoothScrollBy(oldBottom-bottom,100);
}
});
当页面布局变化,也就是调出了软键盘的时候,调用listView的smoothScrooBy方法进行滚动,但这里我限制了只在弹出软键盘时进行滚动(不加条件判断会出现滚动异常:没弄懂)。
2.在添加为ListView添加数据时,也就是listView的adapter调用add方法后,进行一个滚动,取得ListView添加的item的高度,通过adapter的getView方法
private int getHeight() {
View v = adapter.getView(adapter.getCount() - 1, null, lv);//最近添加的item
v.measure(0, 0);
return v.getMeasuredHeight();
}
得到高度进行滚动
lv.smoothScrollBy(getHeight());