1.设置分割线
A.
android:divider="#fffff" 分割线颜色
android:dividerHeight="1px" 分割线高度
B.在xml文件中设置
<!-- res/drawable/liner.xml ->
<?xmlversionxmlversion="1.0"encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:startColor="#000000"
android:centerColor="#CCCCCC"
android:endColor="#FFFFFF"
android:height="1px"
android:angle="0"/>
</shape>
</item>
</layer-list>
在布局文件中引用
android:divider="@drawable/list_divider"
android:dividerHeight="1dip"
2.隐藏滚动条
android:scrollbars="none"与
setVerticalScrollBarEnabled(true);
3.取消item点击效果
android:listSelector="@android:color/transparent"
4.处理空Listview
listview_lv.setEmptyView(view)
5.listview 滑动基本概念
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import com.imooc.load.R;
public class LoadListView extends ListView implements OnScrollListener {
View footer;// 底部布局;
int totalItemCount;// 总数量;
int lastVisibleItem;// 最后一个可见的item;
boolean isLoading;// 正在加载;
ILoadListener iLoadListener;
public LoadListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
initView(context);
}
public LoadListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initView(context);
}
public LoadListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
initView(context);
}
/**
* 添加底部加载提示布局到listview
*
* @param context
*/
private void initView(Context context) {
LayoutInflater inflater = LayoutInflater.from(context);
footer = inflater.inflate(R.layout.footer_layout, null);
footer.findViewById(R.id.load_layout).setVisibility(View.GONE);
this.addFooterView(footer);
this.setOnScrollListener(this);
}
/*
* firstVisibleItem 当前第一个能看见的item id(从0开始)
* 滑动到底部
* if(firstVisibleItem+visibleItemCount=totalItemCount&&visibleItemCount>0)
* 判断滚动方向
* if(firstVisibleItem>lastVisibleItemPosition){
* 上滑
* }else{
* 下滑
* }
*通过一个成员变量lastVisibleItemPosition 来记录第一个可视的Item的ID并于当
*前的id进行比较
* lastVisibleItemPosition =firstVisibleItem;
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
this.lastVisibleItem = firstVisibleItem + visibleItemCount;
this.totalItemCount = totalItemCount;
}
/**
* 当用户没有做手势抛动的状态时,这个方法会调用2次,否则会调用3次 o
* nScrollStateChanged 三种状态 8 *
* SCROLL_STATE_TOUCH_SCROLL 正在滚动 SCROLL_STATE_FLING 手指用力滚动,
* 在离开后listview
* 由于惯性继续滑动的状态
*
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (totalItemCount == lastVisibleItem) {
Log.e("totalItemCount == lastVisibleItem", "onScrollStateChanged");
}
if (totalItemCount == lastVisibleItem
&& scrollState == SCROLL_STATE_IDLE) {
if (!isLoading) {
isLoading = true;
footer.findViewById(R.id.load_layout).setVisibility(
View.VISIBLE);
// 加载更多
iLoadListener.onLoad();
}
}
}
/**
* 加载完毕
*/
public void loadComplete() {
isLoading = false;
footer.findViewById(R.id.load_layout).setVisibility(View.GONE);
}
public void setInterface(ILoadListener iLoadListener) {
this.iLoadListener = iLoadListener;
}
// 加载更多数据的回调接口
public interface ILoadListener {
public void onLoad();
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
6.获取当前可视最后、第一个Item位置
// 获取可视区域内最后一个item的Id
getLastVisiblePosition();
// 获取可视区域内的第一个Item的id
getFirstVisiblePosition();
7.android:fastScrollEnabled=”true”
意:默认只有当ListView的内容大于4页时,才会显示快速滑动块。类似的微信通讯录右侧边 字母快速滑动,原理应该类似。详解文章