类似iOS上可折叠头部的ListView,效果如下图所示
###Gradle
compile 'com.hjy.library:PinnedHeaderListView:1.0.3'
###使用方法
#####PinnedHeaderListView 仅实现可折叠头部的ListView,右边无索引条
-
在layout里配置:
<com.hjy.pinnedheaderlistview.PinnedHeaderListView android:id="@+id/ListView_Country" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:divider="@null" />
-
Adapter需继承PinnedHeaderAdapter类,实现以下几个主要方法:
//总的分组数 public abstract int getSectionCount(); //每一分组里的总条目数 public abstract int getCountForSection(int section); //创建item view public abstract View getSectionItemView(int section, int position, View convertView, ViewGroup parent); //创建每组的header public abstract View getSectionHeaderView(int section, View convertView, ViewGroup parent);
-
实现ListView的OnItemClickListener事件,必须继承OnPinnedHeaderListViewItemClickListener,实现以下几个方法
/** * * @param adapterView ListView * @param section 分组的索引值, 从0开始 * @param id 数据id */ public abstract void onSectionHeaderClick(AdapterView<?> adapterView, int section, long id); /** * * @param adapterView ListView * @param section 分组的索引值 * @param positionInSection 数据在每组内部的索引值, 从0开始 * @param id 数据id */ public abstract void onItemClick(AdapterView<?> adapterView, int section, int positionInSection, long id); /** * 点击ListView.addHeader()添加的item * * @param adapterView ListView * @param position header里的索引值, 从0开始 */ public void onHeaderClick(AdapterView<?> adapterView, int position) { } /** * 点击ListView.addFooter()添加的item * * @param adapterView ListView * @param position footer里的索引值, 从0开始 */ public void onFooterClick(AdapterView<?> adapterView, int position) { }
-
实现ListView的OnItemLongClickListener事件,必须继承OnPinnedHeaderListViewLongItemClickListener,实现以下几个方法
public abstract void onSectionHeaderLongClick(AdapterView<?> adapterView, int section, long id); public abstract void onItemLongClick(AdapterView<?> adapterView, int section, int positionInSection, long id); public void onHeaderLongClick(AdapterView<?> adapterView, int position) { } public void onFooterLongClick(AdapterView<?> adapterView, int position) { }
#####IndexablePinnedHeaderListView 实现了PinnedHeaderListView的全部功能,同时能够在右边展示出一个快速索引条
-
在layout里进行配置
<com.hjy.pinnedheaderlistview.IndexablePinnedHeaderListView android:id="@+id/ListView_Country" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:divider="@null" android:dividerHeight="0px" />
-
同样Adapter必须继承PinnedHeaderAdapter类
为了实现快速索引条,必须实现该方法:
@Override public Object[] getSections() { return null; }
返回的必须是一个字符串数组,该数组用来显示快速索引条上的文本内容,该数组的长度必须与adapter的getSectionCount()返回的长度一致,并一一对应。
-
继承OnPinnedHeaderListViewItemClickListener类来实现itemClick事件
-
继承OnPinnedHeaderListViewLongItemClickListener类来实现itemLongClick事件
-
自定义索引条样式
默认的索引条是灰色半透明背景,文字为白色,预览同样为灰色半透明背景,文字为白色,如需修改可采用如下方法:
-
通过IndexablePinnedHeaderListView.getIndexScroller()获取到IndexScroller对象
-
修改IndexScroller的一些属性,如:
//设置索引条背景颜色<br> public void setIndexBarBackgroundColor(int bgColor) //设置索引条背景的透明度<br> public void setIndexBarBackgroundColorAlpha(int alpha) //设置索引条文本字体颜色<br> public void setIndexBarTextColor(int textColor) //设置索引条文本字体大小<br> public void setIndexBarTextSize(float textSize) //设置预览区域背景颜色<br> public void setPreviewBackgroundColor(int bgColor) //设置预览区域背景的透明度<br> public void setPreviewBackgroundColorAlpha(int alpha) //设置预览区域字体颜色<br> public void setPreviewTextColor(int bgColor) //设置预览区域字体大小<br> public void setPreviewTextSize(float textSize) //设置索引条的宽度<br> public void setIndexBarWidth(float indexBarWidth) //设置预览区域的大小<br> public void setPreviewSize(float previewWidth, float previewHeight) //设置索引条宽度<br> setIndexBarWidth(int width) //设置索引条区域的margin<br> public void setIndexbarMargin(float marginTop, float marginRight, float marginBottom) //是否显示预览,默认为true<br> public void setShowPreiview(boolean isShow)