Skip to content

Commit d9b6a4d

Browse files
AriesHooAriesHoo
authored andcommitted
1、优化:优化TabLayout 状态保存及恢复后tab及Fragment同步问题,增加CommonTabLayout Java方法 以链式调用并修改部分参数属性定义单位转换问题
2、优化:优化TabLayout 选中粗体初始化为第一项时不生效问题;增加设置TextView 粗体的枚举类 3、优化:优化TabLayout 修改Java方法命名不规范问题
1 parent 303107e commit d9b6a4d

File tree

13 files changed

+557
-277
lines changed

13 files changed

+557
-277
lines changed

FlycoTabLayout_Lib/src/main/java/com/flyco/tablayout/CommonTabLayout.java

Lines changed: 332 additions & 144 deletions
Large diffs are not rendered by default.

FlycoTabLayout_Lib/src/main/java/com/flyco/tablayout/SegmentTabLayout.java

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,23 @@
3030

3131
import java.util.ArrayList;
3232

33+
/**
34+
* @Author: AriesHoo on 2018/11/30 11:22
35+
* @E-Mail: AriesHoo@126.com
36+
* @Function:
37+
* @Description: 4、2018年11月30日11:18:41 修改原作者 https://github.com/H07000223/FlycoTabLayout 选中粗体当初始化选中第一项不生效BUG
38+
* * * {@link #updateTabStyles()}
39+
*/
3340
public class SegmentTabLayout extends FrameLayout implements ValueAnimator.AnimatorUpdateListener {
3441
private Context mContext;
3542
private String[] mTitles;
3643
private LinearLayout mTabsContainer;
3744
private int mCurrentTab;
3845
private int mLastTab;
3946
private int mTabCount;
40-
/** 用于绘制显示器 */
47+
/**
48+
* 用于绘制显示器
49+
*/
4150
private Rect mIndicatorRect = new Rect();
4251
private GradientDrawable mIndicatorDrawable = new GradientDrawable();
4352
private GradientDrawable mRectDrawable = new GradientDrawable();
@@ -48,7 +57,9 @@ public class SegmentTabLayout extends FrameLayout implements ValueAnimator.Anima
4857
private boolean mTabSpaceEqual;
4958
private float mTabWidth;
5059

51-
/** indicator */
60+
/**
61+
* indicator
62+
*/
5263
private int mIndicatorColor;
5364
private float mIndicatorHeight;
5465
private float mIndicatorCornerRadius;
@@ -60,19 +71,23 @@ public class SegmentTabLayout extends FrameLayout implements ValueAnimator.Anima
6071
private boolean mIndicatorAnimEnable;
6172
private boolean mIndicatorBounceEnable;
6273

63-
/** divider */
74+
/**
75+
* divider
76+
*/
6477
private int mDividerColor;
6578
private float mDividerWidth;
6679
private float mDividerPadding;
6780

68-
/** title */
81+
/**
82+
* title
83+
*/
6984
private static final int TEXT_BOLD_NONE = 0;
7085
private static final int TEXT_BOLD_WHEN_SELECT = 1;
7186
private static final int TEXT_BOLD_BOTH = 2;
72-
private float mTextsize;
87+
private float mTextSize;
7388
private int mTextSelectColor;
7489
private int mTextUnselectColor;
75-
private int mTextBold;
90+
private TextBold mTextBold;
7691
private boolean mTextAllCaps;
7792

7893
private int mBarColor;
@@ -81,7 +96,9 @@ public class SegmentTabLayout extends FrameLayout implements ValueAnimator.Anima
8196

8297
private int mHeight;
8398

84-
/** anim */
99+
/**
100+
* anim
101+
*/
85102
private ValueAnimator mValueAnimator;
86103
private OvershootInterpolator mInterpolator = new OvershootInterpolator(0.8f);
87104

@@ -143,10 +160,10 @@ private void obtainAttributes(Context context, AttributeSet attrs) {
143160
mDividerWidth = ta.getDimension(R.styleable.SegmentTabLayout_tl_divider_width, dp2px(1));
144161
mDividerPadding = ta.getDimension(R.styleable.SegmentTabLayout_tl_divider_padding, 0);
145162

146-
mTextsize = ta.getDimension(R.styleable.SegmentTabLayout_tl_textsize, sp2px(13f));
163+
mTextSize = ta.getDimension(R.styleable.SegmentTabLayout_tl_textsize, sp2px(13f));
147164
mTextSelectColor = ta.getColor(R.styleable.SegmentTabLayout_tl_textSelectColor, Color.parseColor("#ffffff"));
148165
mTextUnselectColor = ta.getColor(R.styleable.SegmentTabLayout_tl_textUnselectColor, mIndicatorColor);
149-
mTextBold = ta.getInt(R.styleable.SegmentTabLayout_tl_textBold, TEXT_BOLD_NONE);
166+
mTextBold = TextBold.valueOf(ta.getInt(R.styleable.SegmentTabLayout_tl_textBold, TEXT_BOLD_NONE));
150167
mTextAllCaps = ta.getBoolean(R.styleable.SegmentTabLayout_tl_textAllCaps, false);
151168

152169
mTabSpaceEqual = ta.getBoolean(R.styleable.SegmentTabLayout_tl_tab_space_equal, true);
@@ -170,13 +187,17 @@ public void setTabData(String[] titles) {
170187
notifyDataSetChanged();
171188
}
172189

173-
/** 关联数据支持同时切换fragments */
190+
/**
191+
* 关联数据支持同时切换fragments
192+
*/
174193
public void setTabData(String[] titles, FragmentActivity fa, int containerViewId, ArrayList<Fragment> fragments) {
175194
mFragmentChangeManager = new FragmentChangeManager(fa.getSupportFragmentManager(), containerViewId, fragments);
176195
setTabData(titles);
177196
}
178197

179-
/** 更新数据 */
198+
/**
199+
* 更新数据
200+
*/
180201
public void notifyDataSetChanged() {
181202
mTabsContainer.removeAllViews();
182203
this.mTabCount = mTitles.length;
@@ -190,7 +211,9 @@ public void notifyDataSetChanged() {
190211
updateTabStyles();
191212
}
192213

193-
/** 创建并添加tab */
214+
/**
215+
* 创建并添加tab
216+
*/
194217
private void addTab(final int position, View tabView) {
195218
TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title);
196219
tv_tab_title.setText(mTitles[position]);
@@ -226,17 +249,18 @@ private void updateTabStyles() {
226249
for (int i = 0; i < mTabCount; i++) {
227250
View tabView = mTabsContainer.getChildAt(i);
228251
tabView.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0);
229-
TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title);
252+
TextView tv_tab_title = tabView.findViewById(R.id.tv_tab_title);
230253
tv_tab_title.setTextColor(i == mCurrentTab ? mTextSelectColor : mTextUnselectColor);
231-
tv_tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextsize);
232-
// tv_tab_title.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0);
254+
tv_tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
233255
if (mTextAllCaps) {
234256
tv_tab_title.setText(tv_tab_title.getText().toString().toUpperCase());
235257
}
236-
237-
if (mTextBold == TEXT_BOLD_BOTH) {
258+
if (mTextBold == TextBold.BOTH) {
238259
tv_tab_title.getPaint().setFakeBoldText(true);
239-
} else if (mTextBold == TEXT_BOLD_NONE) {
260+
} else if (mTextBold == TextBold.SELECT) {
261+
//增加-以修正原作者第一次选中粗体不生效问题
262+
tv_tab_title.getPaint().setFakeBoldText(mCurrentTab == i);
263+
} else {
240264
tv_tab_title.getPaint().setFakeBoldText(false);
241265
}
242266
}
@@ -248,7 +272,7 @@ private void updateTabSelection(int position) {
248272
final boolean isSelect = i == position;
249273
TextView tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title);
250274
tab_title.setTextColor(isSelect ? mTextSelectColor : mTextUnselectColor);
251-
if (mTextBold == TEXT_BOLD_WHEN_SELECT) {
275+
if (mTextBold == TextBold.SELECT) {
252276
tab_title.getPaint().setFakeBoldText(isSelect);
253277
}
254278
}
@@ -481,8 +505,8 @@ public void setDividerPadding(float dividerPadding) {
481505
invalidate();
482506
}
483507

484-
public void setTextsize(float textsize) {
485-
this.mTextsize = sp2px(textsize);
508+
public void setTextSize(float textSize) {
509+
this.mTextSize = sp2px(textSize);
486510
updateTabStyles();
487511
}
488512

@@ -496,9 +520,10 @@ public void setTextUnselectColor(int textUnselectColor) {
496520
updateTabStyles();
497521
}
498522

499-
public void setTextBold(int textBold) {
523+
public SegmentTabLayout setTextBold(TextBold textBold) {
500524
this.mTextBold = textBold;
501525
updateTabStyles();
526+
return this;
502527
}
503528

504529
public void setTextAllCaps(boolean textAllCaps) {
@@ -578,8 +603,8 @@ public float getDividerPadding() {
578603
return mDividerPadding;
579604
}
580605

581-
public float getTextsize() {
582-
return mTextsize;
606+
public float getTextSize() {
607+
return mTextSize;
583608
}
584609

585610
public int getTextSelectColor() {
@@ -590,7 +615,7 @@ public int getTextUnselectColor() {
590615
return mTextUnselectColor;
591616
}
592617

593-
public int getTextBold() {
618+
public TextBold getTextBold() {
594619
return mTextBold;
595620
}
596621

@@ -672,7 +697,7 @@ public void setMsgMargin(int position, float leftPadding, float bottomPadding) {
672697
MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip);
673698
if (tipView != null) {
674699
TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title);
675-
mTextPaint.setTextSize(mTextsize);
700+
mTextPaint.setTextSize(mTextSize);
676701
float textWidth = mTextPaint.measureText(tv_tab_title.getText().toString());
677702
float textHeight = mTextPaint.descent() - mTextPaint.ascent();
678703
MarginLayoutParams lp = (MarginLayoutParams) tipView.getLayoutParams();
@@ -684,7 +709,9 @@ public void setMsgMargin(int position, float leftPadding, float bottomPadding) {
684709
}
685710
}
686711

687-
/** 当前类只提供了少许设置未读消息属性的方法,可以通过该方法获取MsgView对象从而各种设置 */
712+
/**
713+
* 当前类只提供了少许设置未读消息属性的方法,可以通过该方法获取MsgView对象从而各种设置
714+
*/
688715
public MsgView getMsgView(int position) {
689716
if (position >= mTabCount) {
690717
position = mTabCount - 1;
@@ -715,7 +742,8 @@ protected void onRestoreInstanceState(Parcelable state) {
715742
mCurrentTab = bundle.getInt("mCurrentTab");
716743
state = bundle.getParcelable("instanceState");
717744
if (mCurrentTab != 0 && mTabsContainer.getChildCount() > 0) {
718-
updateTabSelection(mCurrentTab);
745+
//updateTabSelection(mCurrentTab); 原作者恢复状态时未将Fragment选中CurrentTab
746+
setCurrentTab(mCurrentTab);
719747
}
720748
}
721749
super.onRestoreInstanceState(state);

0 commit comments

Comments
 (0)