目前可以自定义的样式,包括所有LinearLayout所有的自定义以及以下自定义.
可自定义属性
app:tab_text_color_normal="@color/colorAccent" <!--tab字体正常颜色-->
app:tab_text_color_focus="@color/colorPrimary" <!--tab字体选中颜色-->
app:tab_background_normal="@color/cardview_dark_background"<!--tab正常背景-->
app:tab_background_focus="@color/color48"<!--tab选中背景-->
app:tab_textsize="6dp" <!--tab字体大小-->
app:tab_pop_anim="@anim/pop_anim" <!--tab字体大小-->
首先,
如果仅仅是修改样式,直接选择分别新建MyFilterPopWindow
继承 SuperPopWindow的子类
(例如SingleFilterWindow), MyFilterAdapter
继承SuperAdapter
,并实现关键方法即可.
在筛选列的样式中.
1.SuperPopWindow
负责逻辑和交互
2.SuperAdapter
负责样式和数据绑定
3.SuperListener
负责自定义扩展监听
1.首先继承superListener
构建自己的筛选监听,但也可以用listener包下的listener
.我在这里用OnSingleItemClickListener
.
2.构建MyFilterPopWindow
.
/**
自定义 继承关系
* Created by chenchangjun on 17/8/25.
*/
public class MyFilterPopWindow extends SingleFilterWindow {
/**
* 重写父类构造方法,如果需要其他参数请在本类中定义
* @param context
* @param data
* @param listener
* @param filterType
* @param singleOrMutiply
*/
public MyFilterPopWindow(Context context, List data, OnFilterSetListener listener, int filterType, int singleOrMutiply) {
super(context,data,listener,filterType,singleOrMutiply);
}
/**
* 重写setAdapter 方法,返回自己的adapter
* @return
*/
@Override
public SuperAdapter setAdapter() {
return new MyFilterAdapter(getData(), this, getSingleOrMultiply());
}
}
3.构建adapter
.
/**
* 单栏筛选adapter
*
* @author ccj on 17/3/23.
*/
public class MyFilterAdapter extends SuperAdapter {
/**
* view和holder构建入口
* @param parent
* @param viewType
* @return
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_my_filter, parent, false);//可以根据自己的布局,进行修改
return new MyFilterViewHolder(v, this);
}
public MyFilterAdapter(List<BaseFilterTabBean> beanList, SuperListener listener, int single2mutiple) {
super(beanList, listener, single2mutiple);
}
/**
* 这里~由于需求可能变更,这里开放监听, listener 需要进行强转,转成自己的listener, 当然也可以用listener包下的监听
* @param position
*/
@Override
public void onFilterItemClick(int position) {
((OnSingleItemClickListener) getListener()).onSingleItemClickListener(getCheckedLists());//强转
}
/**
* 样式选择入口
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyFilterViewHolder viewHolder = (MyFilterViewHolder) holder;
viewHolder.tv_filter.setText(getData().get(position).getTab_name());
//根据自己的样式修改
if (getCheckedLists().contains(position)) {
viewHolder.tv_filter.setSelected(true);
} else {
viewHolder.tv_filter.setSelected(false);
}
}
/**
* 自己的holder样式
*/
//根据自己的样式修改
public static class MyFilterViewHolder extends SuperFilterViewHolder {
private TextView tv_filter;
public MyFilterViewHolder(View itemView, OnHolderClickedListener listener) {
super(itemView, listener);
tv_filter = (TextView) itemView.findViewById(R.id.textView);
}
}
}
public class MyFilterConfig extends FilterConfig {
//自定义popwindow类型
public final static int TYPE_POPWINDOW_MY = 4; //自定义的类型
}
把自定义的MyFilterPopWindow
添加进去即可
/**
* 由筛选器类型 建立实体 的loader
* Created by chenchangjun on 17/6/28.
*/
public class MyPopEntityLoaderImp implements PopEntityLoader {
/**
* 由 getPopType 得到不同的类型的filter实体
* @param context
* @param data
* @param filterSetListener 监听
* @param filterType 筛选品类
* @param singleOrMultiply 筛选方式--单选 or 多选
* @return
*/
@Override
public PopupWindow getPopEntity(Context context, List data, OnFilterSetListener filterSetListener, int filterType, int singleOrMultiply) {
PopupWindow popupWindow = null;
switch (filterType) {
//省略其他样式
case MyFilterConfig.TYPE_POPWINDOW_MY:
popupWindow = new MyFilterPopWindow(context, data, filterSetListener,filterType,singleOrMultiply);//自定义
break;
default:
popupWindow = new SingleFilterWindow(context, data, filterSetListener,filterType,singleOrMultiply);
break;
}
return popupWindow;
}
}
private void addMyMethod() {
FilterGroup filterGroup1 = getMyData("单列筛选", MyFilterConfig.TYPE_POPWINDOW_SINGLE,MyFilterConfig.FILTER_TYPE_SINGLE);
FilterGroup filterGroup5 = getMyData("自定义单列", MyFilterConfig.TYPE_POPWINDOW_MY,MyFilterConfig.FILTER_TYPE_MUTIFY);//自定义
popTabView.setOnPopTabSetListener(this)
.setPopEntityLoader(new MyPopEntityLoaderImp()).setResultLoader(new MyResultLoaderImp()) //配置 {筛选类型} 方式
.addFilterItem(filterGroup1.getTab_group_name(), filterGroup1.getFilter_tab(), filterGroup1.getTab_group_type(), filterGroup1.getSingle_or_mutiply())
.addFilterItem(filterGroup5.getTab_group_name(), filterGroup5.getFilter_tab(), filterGroup5.getTab_group_type(), filterGroup5.getSingle_or_mutiply());
}
由于每个筛选器,都可能有自己的样式,用户可以根据我的源码自己继承,进行样式扩展即可. 也可以,直接下载源码,在源码的基础上直接修改.逻辑不用修改,只需要修改,adapter中的 不同样式下的状态即可
以上