()设置分隔线
ListView默认是有分隔线的,可以通过android:divider=”@null”设置分隔线透明,也可以通过 android:divider和android:dividerHeight来设置分隔线的颜色(图片)和分隔线的高度。
注:分隔线是指每个Item之间的线,ListView高度设置为match_parent时,最后一个Item的后面也有分隔线,ListView高度设置为wrap_content最后一个Item没有分隔线。
()设置滚动条
ListView在滚动时,默认在右边是有滚动条的。可以设置android:scrollbars=”none”来取消滚动条。
()设置item点击效果
点击ListView的Item时,默认会出现一个点击效果。可以设置android:listSelector来改变Item点击的颜色。
()处理空数据时ListView显示的布局
可以通过setEmptyView(View emptyView)设置ListView在空数据显示的布局。
注:setEmptyView加载的emptyView必须与ListView在同一个布局文件中,可以把ListView和emptyView写在FrameLayout中。
()弹性(阻尼)ListView
这个效果有很多种实现方式,下面的方式是非常简单的
只需重写overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)方法,修改maxOverScrollY参数值
参数maxOverScrollY注释:Number of pixels to overscroll by in either direction along the Y axis.
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX,
int scrollRangeY, int maxOverScrollX,
int maxOverScrollY, boolean isTouchEvent) {
float density = mContext.getResources().
getDisplayMetrics().density;
int mMaxOverScrollY = (int) (density * 50);
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY,
maxOverScrollX, mMaxOverScrollY, isTouchEvent);
}
()ListView加载多种不同Item
只需要重写下面二个方法
int getViewTypeCount():返回不同布局的总数.
int getItemViewType(int position):返回第position个Item是那种类型,返回值必须从0开始,不然就会报错
()ListView和ScrollView冲突
如果ScrollView中存在ListView,那么ListView数据不会展示完全,这时需要重写onMeasure()方法
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = View.MeasureSpec.
makeMeasureSpec(Integer.MAX_VALUE >> 2,
View.MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
()触摸事件
setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//向下时触发
break;
case MotionEvent.ACTION_MOVE:
//移动触发
break;
case MotionEvent.ACTION_UP:
//向上触摸
break;
}
return false;
}
});
这个方法只要触摸就一直被调用
()滚动事件
setOnScrollListener(new AbsListView.OnScrollListener(){
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
//滚动停止
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
//正在滚动
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
//手指用力滑动,离开ListView后,由于惯性继续滚动
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount){
if (firstVisibleItem + visibleItemCount >= totalItemCount){
//滚动到最后一页"
}
if (lastVisibleItem > firstVisibleItem) {
//往下滑动
} else if (lastVisibleItem <firstVisibleItem){
//往上滑动
}
lastVisibleItem = firstVisibleItem;
}
});
onScrollStateChanged()方法:如果没有惯性滚动,会调用两次.如果存在惯性滚动,会调用三次
onScroll()方法:ListView滚动时会一直回调
firstVisibleItem参数:当前能看到的第一个Item(从0开始)
visibleItemCount参数:当前能看到的Item的总数
totalItemCount参数:整个ListView的Item总数