Skip to content

Commit 0714a69

Browse files
committed
LabelFlowlayout
增加BaseLabelItem,增加Header,可实现换行
1 parent b8b7da9 commit 0714a69

11 files changed

Lines changed: 90 additions & 14 deletions

File tree

.idea/misc.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Label_README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,12 @@ bean.showMoreColor = Color.WHITE;
184184
flowLayout.setLabelBean(bean);
185185
```
186186

187-
### 3.3.7参考代码:
187+
### 3.3.7 主动换行
188+
189+
你可能想有个 Header 换行,然后再显示不同的数据,这个时候,需要你的数据类继承 BaseLabelItem,把 isHeader 设置为ture,
190+
即可实现自动换行。
191+
192+
### 参考代码:
188193

189194
[布局代码](https://github.com/LillteZheng/FlowHelper/blob/master/app/src/main/res/layout/activity_label.xml)
190195

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ implementation 'com.github.LillteZheng:FlowHelper:v2.3'
144144

145145

146146
## 版本信息:
147+
- v2.4 : 修复TabLabelLayout 在调用 resetStatus,第一个无法点击的问题。并增加 BaseLabelItem,Bean 类继承它,可实现换行
147148
- v2.3 : 修改TabVpFlowLayout 快速点击时,TabColorTextView 还有残留,和 tab 没有转移过去的问题
148149
- v2.0 : 内置部分控件,减少接入成本,并优化一些bug,和关闭demo ,viewpager 内存泄露的问题
149150
- v1.37 : 增加 tab_width_equals_text ,让 rect 根据 text 的长度变化,修复 TabColorTextView 加粗不起作用的问题

appx/src/main/java/com/zhengsr/tabhelper/MainActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ protected void onCreate(Bundle savedInstanceState) {
3232
setContentView(R.layout.activity_main);
3333
TextView textView = findViewById(R.id.text);
3434
textView.setTextColor(getResources().getColor(R.color.color_selector));
35-
3635
}
3736

3837

appx/src/main/java/com/zhengsr/tabhelper/activity/LabelActivity.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package com.zhengsr.tabhelper.activity;
22

33
import android.graphics.Color;
4+
import android.icu.text.CaseMap;
45
import android.os.Bundle;
6+
import android.service.quicksettings.Tile;
57
import android.view.View;
68
import android.widget.Toast;
79

810
import androidx.appcompat.app.AppCompatActivity;
911

1012
import com.zhengsr.tabhelper.CommonUtils;
1113
import com.zhengsr.tabhelper.R;
14+
import com.zhengsr.tablib.bean.BaseLabelItem;
1215
import com.zhengsr.tablib.view.adapter.LabelFlowAdapter;
1316
import com.zhengsr.tablib.view.flow.LabelFlowLayout;
1417

@@ -31,14 +34,25 @@ protected void onCreate(Bundle savedInstanceState) {
3134

3235
private void singleFlow(){
3336
LabelFlowLayout flowLayout = findViewById(R.id.singleflow);
37+
List<SingleBean> datas = new ArrayList();
38+
for (int i = 0; i < mTitle.size(); i++) {
39+
SingleBean bean = new SingleBean();
40+
bean.name = mTitle.get(i);
41+
if (i == 0 || i == 3){
42+
bean.isHeader = true;
43+
bean.name = "Header";
44+
}
45+
datas.add(bean);
46+
}
3447
final LabelFlowAdapter adapter;
35-
flowLayout.setAdapter(adapter = new LabelFlowAdapter<String>(R.layout.item_textview,mTitle) {
48+
flowLayout.setAdapter(adapter = new LabelFlowAdapter<SingleBean>(R.layout.item_textview,datas) {
3649
@Override
37-
public void bindView(View view, String data, int position) {
38-
setText(view, R.id.item_text,data)
50+
public void bindView(View view, SingleBean data, int position) {
51+
setText(view, R.id.item_text,data.name)
3952
. setTextColor(view, R.id.item_text,getResources().getColor(R.color.unselect));
4053
}
4154

55+
4256
@Override
4357
public void onItemSelectState(View view, boolean isSelected) {
4458
super.onItemSelectState(view, isSelected);
@@ -63,6 +77,9 @@ public void onClick(View view) {
6377

6478
}
6579

80+
class SingleBean extends BaseLabelItem{
81+
public String name;
82+
}
6683

6784
private void searchFlow(){
6885
LabelFlowLayout flowLayout = findViewById(R.id.search_flow);
@@ -151,4 +168,7 @@ public boolean onItemLongClick(View view,int position) {
151168
}
152169

153170

171+
public void test(View view) {
172+
173+
}
154174
}

appx/src/main/res/layout/activity_label.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@
8686
android:layout_marginTop="5dp"
8787
android:layout_marginBottom="10dp"
8888
app:label_maxSelectCount="3" />
89+
90+
<Button
91+
android:layout_width="wrap_content"
92+
android:layout_height="wrap_content"
93+
android:onClick="test"
94+
android:text="测试"/>
8995
</LinearLayout>
9096

9197
</ScrollView>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.zhengsr.tablib.bean;
2+
3+
/**
4+
* @author by zhengshaorui 2023/3/29
5+
* describe:Label
6+
*/
7+
public class BaseLabelItem {
8+
public boolean isHeader;
9+
}

tablibx/src/main/java/com/zhengsr/tablib/view/flow/LabelFlowLayout.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,11 @@
2929
* @auther by zhengshaorui on 2020/1/8
3030
* describe: 标签瀑布流布局,支持单选,多选
3131
*/
32-
public class LabelFlowLayout extends ScrollFlowLayout {
32+
public class LabelFlowLayout extends ScrollFlowLayout<LabelFlowAdapter> {
3333
private static final String TAG = "LabelFlowLayout";
3434
/**
3535
* logic
3636
*/
37-
private LabelFlowAdapter mAdapter;
3837
private int mMaxSelectCount;
3938
private int mLastPosition = -1;
4039
private boolean isHasMoreView;
@@ -431,7 +430,6 @@ public void setAutoScroll(boolean autoScroll) {
431430
}
432431

433432

434-
435433
/**
436434
* 设置自定义属性
437435
*

tablibx/src/main/java/com/zhengsr/tablib/view/flow/base/AbsFlowLayout.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
* @author by zhengshaorui 2021/5/23 06:40
4444
* describe:用来获取通用的自定义属性,和一些常用的配置
4545
*/
46-
public class AbsFlowLayout extends ScrollFlowLayout {
46+
public class AbsFlowLayout extends ScrollFlowLayout<TabFlowAdapter> {
4747
private static final String TAG = AbsFlowLayout.class.getSimpleName();
4848
/**
4949
* attrs
@@ -55,7 +55,6 @@ public class AbsFlowLayout extends ScrollFlowLayout {
5555
*/
5656
protected BaseAction mAction;
5757
private TabConfig mTabConfig;
58-
protected TabFlowAdapter mAdapter;
5958
protected Scroller mScroller;
6059
protected int mLastScrollPos = 0;
6160
protected int mLastIndex = 0;

tablibx/src/main/java/com/zhengsr/tablib/view/flow/base/FlowLayout.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import androidx.annotation.Nullable;
1111

1212
import com.zhengsr.tablib.FlowConstants;
13+
import com.zhengsr.tablib.bean.BaseLabelItem;
14+
import com.zhengsr.tablib.view.adapter.BaseFlowAdapter;
1315

1416
import java.util.ArrayList;
1517
import java.util.List;
@@ -18,7 +20,7 @@
1820
* @author by zhengshaorui on 2019/10/8
1921
* Describe: 瀑布流布局,这个类只用来测量子控件,不做其他操作
2022
*/
21-
class FlowLayout extends ViewGroup {
23+
class FlowLayout<T extends BaseFlowAdapter> extends ViewGroup {
2224
private static final String TAG = "FlowLayout";
2325
protected int mViewWidth;
2426
protected int mViewHeight;
@@ -35,6 +37,7 @@ class FlowLayout extends ViewGroup {
3537
private int mLabelLines = -1;
3638
private boolean isLabelMoreLine;
3739
protected int mLineWidth;
40+
protected T mAdapter;
3841

3942
public FlowLayout(Context context) {
4043
this(context, null);
@@ -162,7 +165,7 @@ private void measureTabHorizontal(int widthMeasureSpec, int heightMeasureSpec) {
162165
int widthPixels = getResources().getDisplayMetrics().widthPixels;
163166
if (MeasureSpec.EXACTLY == widthMode) {
164167
widthPixels = widthSize;
165-
}else {
168+
} else {
166169
if (mVisibleCount != -1) {
167170
MarginLayoutParams parentParams = (MarginLayoutParams) getLayoutParams();
168171
widthPixels -= (getPaddingStart() + getPaddingEnd() + parentParams.leftMargin + parentParams.rightMargin);
@@ -271,9 +274,11 @@ private void measureVertical(int widthMeasureSpec, int heightMeasureSpec) {
271274
/**
272275
* 确定是否换行
273276
*/
277+
boolean isFull = lineWidth + cWidth > (widthSize - (getPaddingLeft() + getPaddingRight()));
278+
boolean isHeader = isHeader(i);
274279

275-
if (lineWidth + cWidth > (widthSize - (getPaddingLeft() + getPaddingRight()))) {
276280

281+
if (isFull) {
277282
//换行
278283
height += lineHeight;
279284

@@ -297,10 +302,32 @@ private void measureVertical(int widthMeasureSpec, int heightMeasureSpec) {
297302

298303
} else {
299304
//未换行
305+
if (isHeader) {
306+
//查看上一个
307+
if (i > 0 && getChildAt(i - 1) != null) {
308+
//// 如果当前子视图是头部视图,并且上一个子视图不为空,则另起一行
309+
height += lineHeight;
310+
mLineHeights.add(lineHeight);
311+
mAllViews.add(lineViews);
312+
lineViews = new ArrayList<>();
313+
}
314+
}
300315
lineWidth += cWidth;
301316
lineHeight = Math.max(lineHeight, cHeight);
302317
mLineWidth = Math.max(mLineWidth, lineWidth);
303318
lineViews.add(child);
319+
320+
if (isHeader) {
321+
//换行
322+
height += lineHeight;
323+
324+
325+
mLineHeights.add(lineHeight);
326+
mAllViews.add(lineViews);
327+
lineViews = new ArrayList<>();
328+
}
329+
330+
304331
}
305332

306333
//加最后一行
@@ -408,6 +435,15 @@ public boolean isVerticalMove() {
408435
return isVertical() || isLabelFlow();
409436
}
410437

438+
private boolean isHeader(int index) {
439+
if (mAdapter != null && mAdapter.getDatas() != null) {
440+
Object bean = mAdapter.getDatas().get(index);
441+
if (bean instanceof BaseLabelItem) {
442+
return ((BaseLabelItem) bean).isHeader;
443+
}
444+
}
445+
return false;
446+
}
411447

412448
public boolean isLabelMoreLine() {
413449
return isLabelMoreLine;

0 commit comments

Comments
 (0)