转载自 https://blog.youkuaiyun.com/natloc/article/details/50850099
默认情况下,当添加的 Item 超出 ListView 的范围后,ListView 并没有刷新让最新一条显示出来。而在 qq/微信 聊天中,发新的消息后会自动滚动显示出最下面的一条信息。
调用方式
- AbsListView.java:
public int getTranscriptMode() // 用于查询当前的 transcript 模式
void setTranscriptMode(int mode) // 用于设置 transcript 模式
AbsListView.TRANSCRIPT_MODE_DISABLED // 禁用
AbsListView.TRANSCRIPT_MODE_NORMAL // 正常状态
AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL // 总是滚动到最新一条
布局文件设置
<ListView android:id="@+id/lv_test"
android:layout_width="match_parent"
android:layout_height="300dp"
<!-- 以下模式只能选一种 -->
android:transcriptMode="normal"
android:transcriptMode="disabled"
android:transcriptMode="alwaysScroll"
>
源码分析
- 获取当前模式:
/**
* Returns the current transcript mode.
*
* @return {@link #TRANSCRIPT_MODE_DISABLED}, {@link #TRANSCRIPT_MODE_NORMAL} or
* {@link #TRANSCRIPT_MODE_ALWAYS_SCROLL}
*/
- 设置模式:
/**
* Puts the list or grid into transcript mode. In this mode the list or grid will always scroll
* to the bottom to show new items.
*
* @param mode the transcript mode to set
*
* @see #TRANSCRIPT_MODE_DISABLED
* @see #TRANSCRIPT_MODE_NORMAL
* @see #TRANSCRIPT_MODE_ALWAYS_SCROLL
*/
public void setTranscriptMode(int mode) {
mTranscriptMode = mode;
}
- 效果图:
- disable 状态:
- normal 状态:
- always 状态:
- disable 状态: