本库是基于RecycleView和FlexboxLayout的封装,提供了标签列表的多选,单选,和只用于列表标签的展示,水平及垂直导航栏(支持绑定ViewPager)等功能。
1、使用简单,只需几行代码就可以使用本库
2、自定义性强,默认选择时和选中状态时,字体颜色,大小,背景色都可以自定义,如果还不满足你的需求,可以重写item的layout
3、支持单选、多选、和只用于展示使用,多选支持选择数量
4、支持setListener,当点击或选择时回调
5、支持设置预选列表 setSelectedData(List)
6、支持获取选中数据的列表 getSelectedData()
7、支持顶部导航栏和垂直导航栏,支持绑定ViewPager
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
...
//只支持AndroidX
implementation 'com.github.huahuiPj:SmartFlexboxLayout:1.1.2'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
}
多选布局:
<com.chh.flexboxlayoututils.widget.SmartFlexboxLayout
android:id="@+id/mSmartFlexboxLayout_Mulit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:default_color="#555555"
app:selected_textColor="#ffffff"
app:default_drawable="@drawable/shape_default_drawable"
app:selected_drawable="@drawable/shape_selected_drawable"
app:text_size="14sp"
app:checked_enable="true"
app:mode="Mulit"
app:max_num="3"/>
单选布局:
<com.chh.flexboxlayoututils.widget.SmartFlexboxLayout
android:id="@+id/mSmartFlexboxLayout_singer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:default_color="#555555"
app:selected_textColor="#ffffff"
app:default_drawable="@drawable/shape_default_drawable"
app:selected_drawable="@drawable/shape_selected_drawable"
app:text_size="14sp"
app:checked_enable="true"
app:mode="Singer"/>
只用于展示布局:
<com.chh.flexboxlayoututils.widget.SmartFlexboxLayout
android:id="@+id/mSmartFlexboxLayout_onlyShow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:checked_enable="false"/>
垂直导航栏布局展示:
<com.chh.flexboxlayoututils.widget.SmartFlexboxLayout
android:id="@+id/mSmartFlexboxLayout_singerTabVertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#eaeaea"
android:layout_marginTop="20dp"
app:default_color="#333333"
app:selected_textColor="#f00"
app:default_drawable="@drawable/layer_tab_v_default"
app:selected_drawable="@drawable/layer_tab_v_select"
app:divider="@drawable/shape_divider"
app:text_size="14sp"
app:checked_enable="true"
app:mode="Singer"
app:line_feed="false" //true:换行 false:不换行
app:orientation="Vertical"/>
水平导航栏布局展示
<com.chh.flexboxlayoututils.widget.SmartFlexboxLayout
android:id="@+id/mSmartFlexboxLayout_singerTabHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:layout_marginTop="20dp"
app:default_color="#333333"
app:selected_textColor="#f00"
app:default_drawable="@drawable/layer_tab_h_default"
app:selected_drawable="@drawable/layer_tab_h_select"
app:text_size="14sp"
app:checked_enable="true"
app:mode="Singer"
app:line_feed="false" //true:换行 false:不换行
app:orientation="Horizontal"/>
- default_color 默认时的字体颜色
- selected_textColor 选中时的字体颜色
- default_drawable 默认时样式
- selected_drawable 选中时的样式
- text_size 字体大小
- checked_enable 设置是否可以选中 (默认根据选择模式:单选模式-false 多选模式-true)
- mode 选择类型 单选:Singer 多选:Mulit (默认多选)
- max_num 多选时生效 最大选择数量 (默认单选为1 多选为1) *line_feed 是否换行 true:换行 false:不换行 (默认换行) *divider 分隔线 (默认无) *orientation 布局方向 水平方向:Horizontal 垂直方向:Vertical (默认水平方向)
mSmartFlexboxLayout_Mulit.setListener(new setOnItemClickListener() {
@Override
public void onItemClick(View view, int position, boolean isCheck) {
Log.d("TAG","onItemClick:"+ position +" isCheck:"+isCheck);
}
});
List<String> selectedData = mSmartFlexboxLayout_Mulit.getSelectedData();
mSmartFlexboxLayout_Mulit.setSelectedData(List<Integer>);
mSmartFlexboxLayout_Mulit.setData(Context,List<String>);
mSmartFlexboxLayout_onlyShow.setData(Context,layoutRes,List<String>);
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mTextItems"
android:layout_width="wrap_content" //要实现水平导航栏item宽度相等时要设置权重(android:layout_width="0dp" android:layout_weight="1" ) 否则不用设置
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:drawableLeft="@drawable/shape_show_text"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="#333333"
android:background="#ffffff"
android:maxLines="1"
android:text="item"/>
//多选
final SmartFlexboxLayout mSmartFlexboxLayout_Mulit = findViewById(R.id.mSmartFlexboxLayout_Mulit);
mSmartFlexboxLayout_Mulit.setData(this,dataList);//设置数据源
mSmartFlexboxLayout_Mulit.setSelectedData(selectList);//设置预先选中的数据
mSmartFlexboxLayout_Mulit.setListener(new setOnItemClickListener() {
@Override
public void onItemClick(View view, int position, boolean isCheck) {
Log.d("TAG","onItemClick:"+ position +" isCheck:"+isCheck);
}
});
//单选
final SmartFlexboxLayout mSmartFlexboxLayout_singer = findViewById(R.id.mSmartFlexboxLayout_singer);
mSmartFlexboxLayout_singer.setData(this,dataList);//设置数据源
mSmartFlexboxLayout_singer.setSelectedData(selectList);//设置预先选中的数据
mSmartFlexboxLayout_singer.setListener(new setOnItemClickListener() {
@Override
public void onItemClick(View view, int position, boolean isCheck) {
Log.d("TAG","onItemClick:"+ position +" isCheck:"+isCheck);
}
});
//只展示
final SmartFlexboxLayout mSmartFlexboxLayout_onlyShow = findViewById(R.id.mSmartFlexboxLayout_onlyShow);
mSmartFlexboxLayout_onlyShow.setData(this,R.layout.item_my_tv,dataList);//设置自定义条目及数据源
mSmartFlexboxLayout_onlyShow.setListener(new setOnItemClickListener() {
@Override
public void onItemClick(View view, int position, boolean isCheck) {
Log.d("TAG","onItemClick:"+ position +" isCheck:"+isCheck);
}
});
//导航栏绑定ViewPager
ViewPager mViewPager = findViewById(R.id.mViewPager);
List<Fragment> fList = new ArrayList<>();
fList.add(new FirstFragmentFragment());
fList.add(new SecondFragmentFragment());
mSmartFlexboxLayout.bindPagerAdapter(mViewPager,getSupportFragmentManager(),fList);