## LabelFlowLayout 效果图
LabelFlowLayout LabelFlowLayout 显示更多
## 3.3 LabelFlowLayout LabelFlowLayout 竖向布局,支持自动换行,单选、多选、长按等功能. **它的状态变化,根据 view 的 selected 来,所以大家可以写 selector 当背景,或者在方法中自己设置** **LabelFlowLayout 支持以下效果:** - **单选** - **多选** - **长按** - **显示更多** - **收起** ### 3.3.1 使用 LabelFlowLayout 默认单选,在 xml 这样配置: ``` ``` FlowLayout 使用也使用 adapter 去配置数据: ``` LabelFlowLayout flowLayout = findViewById(R.id.singleflow); final LabelFlowAdapter adapter; flowLayout.setAdapter(adapter = new LabelFlowAdapter(R.layout.item_textview,mTitle){ /** * 绑定数据,可以使用 setText(..) 等快捷方式,也可以视同 view.findViewById() * 同时,当你的子控件需要点击事件时,可以通过 addChildrenClick() 注册事件, * 然后重写 onItemChildClick(..) 即可拿到事件,否则就自己写。 * 自己的点击和长按不需要注册 */ @Override public void bindView(View view, String data, int position) { setText(view,R.id.item_text,data); // 注册子控件的点击事件 //addChildrenClick(view,R.id.item_text,position); } @Override public void onItemSelectState(View view, boolean isSelected) { super.onItemSelectState(view, isSelected); TextView textView = view.findViewById(R.id.item_text); if (isSelected) { textView.setTextColor(Color.WHITE); } else { textView.setTextColor(Color.GRAY); } } }); ``` **如果需要数据更新,使用adapger.notifyDataChanged()即可** ## 3.3.2 多选 其实只需要配置 flowLayout.setMaxSelectCount(3); 就可以了,然后adapter 中重写: ``` @Override public void onReachMaxCount(List ids, int count) { super.onReachMaxCount(ids, count); Toast.makeText(LabelActivity.this, "最多只能选中 "+count+" 个"+" 已选中坐标: "+ids, Toast.LENGTH_SHORT).show(); } ``` **如果您选默认选中其中一些item,可以使用 flowLayout.setSelects(2,3,5);** ## 3.3.3 长按 其实就是长按view,至于状态的变化,由自己去写: ``` private void canLongFlow(){ LabelFlowLayout flowLayout = findViewById(R.id.longflow); flowLayout.setAdapter(new LabelFlowAdapter(R.layout.item_search_layout,mTitle2) { @Override public void bindView(View view, String data, int position) { setText(view,R.id.search_msg_tv,data) .addChildrenClick(view,R.id.search_delete_iv,position); } @Override public void onItemSelectState(View view, boolean isSelected) { super.onItemSelectState(view, isSelected); if (!isSelected){ view.setBackgroundResource(R.drawable.shape_search); setVisible(view,R.id.search_delete_iv,false); } } @Override public void onItemClick(View view, String data, int position) { super.onItemClick(view, data, position); Toast.makeText(LabelActivity.this, "点击了: "+data, Toast.LENGTH_SHORT).show(); } @Override public void onItemChildClick(View childView, int position) { super.onItemChildClick(childView, position); if (childView.getId() == R.id.search_delete_iv){ mTitle2.remove(position); notifyDataChanged(); } } @Override public boolean onItemLongClick(View view,int position) { /** * 置所有view 的 select 为 false */ resetStatus(); view.setBackgroundResource(R.drawable.shape_search_select); setVisible(view,R.id.search_delete_iv,true); return super.onItemLongClick(view,position); } }); } ``` ### 3.3.5 显示更多和收起 LabelFlowLayout 还支持显示更多和收起的功能,如图: 配置的 xml 如下: ``` ``` - label_showLine 表示最多显示的行数 - label_showMore_layoutId 表示显示更多的layoutId,这样方便客制化 - label_showMore_Color 表示主背景色,用来设置 shader 虚化 - label_handUp_layoutId 收起的 LayoutId,方便自己客制化 上面的 label_showMore_Color 可能不太理解,其实就是把 **显示更多的 LayoutId** 转成bitmap,显示在下面;虚化怎么办呢? 其实就是给 paint 设置一个 shader,上面为透明色,下面给背景色一样,就能达到虚化的效果。如: ``` /** * 同时加上一个 shader,让它有模糊效果 */ Shader shader = new LinearGradient(0, 0, 0, getHeight(), Color.TRANSPARENT, mShowMoreColor, Shader.TileMode.CLAMP); mPaint.setShader(shader); ``` ### 3.3.6 配置自定义属性 当然,也支持动态配置自定义属性。如下: ``` LabelBean bean = new LabelBean(); bean.showLines = 2; bean.showMoreLayoutId = R.layout.show_more; bean.showMoreColor = Color.WHITE; flowLayout.setLabelBean(bean); ``` ### 3.3.7参考代码: [布局代码](https://github.com/LillteZheng/FlowHelper/blob/master/app/src/main/res/layout/activity_label.xml) [Activity代码](https://github.com/LillteZheng/FlowHelper/blob/master/app/src/main/java/com/zhengsr/tabhelper/activity/LabelActivity.java) ### 自定义属性列表 **LabelFlowLayout** | 名称 | 类型 |说明 | |---|---|---| |label_maxcount|integer|最大选择个数| |label_iaAutoScroll|boolean|是否支持自动滚动| |label_showLine|integer|最多显示的行数| |label_showMore_layoutId|integer|显示更多的layoutId| |label_showMore_Color|color|显示更多的背景色,为了虚化作用| |label_handUp_layoutId|integer|收起的layoutId|