Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit 6743628

Browse files
committed
add scroll to BottomNavigationView
1 parent 56ffb94 commit 6743628

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

yanndroid/oneui/src/main/java/de/dlyt/yanndroid/oneui/view/BottomNavigationView.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.provider.Settings;
88
import android.util.AttributeSet;
99
import android.util.DisplayMetrics;
10+
import android.util.Log;
1011
import android.view.Display;
1112
import android.view.View;
1213
import android.view.ViewGroup;
@@ -41,18 +42,99 @@ public void updateWidget(Activity activity) {
4142
mActivity = activity;
4243
mTextViews = new ArrayList<>();
4344

45+
Float[] tabCount = new Float[getTabCount()];
46+
float f = 0.0f;
47+
4448
for (int tabPosition = 0; tabPosition < getTabCount(); tabPosition++) {
4549
Tab tab = getTabAt(tabPosition);
4650
ViewGroup tabView = (ViewGroup) getTabView(tabPosition);
4751
if (!(tab == null || tabView == null)) {
4852
TextView textView = tab.seslGetTextView();
4953
mTextViews.add(textView);
5054
ViewSupport.setPointerIcon(tabView, 1000);
55+
56+
tabCount[tabPosition] = getTabTextWidth(tab.seslGetTextView());
57+
f += tabCount[tabPosition];
5158
}
5259
}
60+
61+
setViewDimens(tabCount, f);
5362
invalidateTabLayout();
5463
}
5564

65+
private void setViewDimens(Float[] fArr, float f) {
66+
int i;
67+
int tabCount = getTabCount();
68+
if (tabCount > 0) {
69+
int dimensionPixelSize = getResources().getDimensionPixelSize(R.dimen.tablayout_start_end_margin);
70+
i = getContext().getResources().getDisplayMetrics().widthPixels;
71+
int i2 = i - (dimensionPixelSize * 2);
72+
float dimensionPixelSize2 = (float) getResources().getDimensionPixelSize(R.dimen.tablayout_text_padding);
73+
float f2 = (float) i2;
74+
float f3 = f2 / ((float) tabCount);
75+
float f4 = dimensionPixelSize2 * 2.0f;
76+
float f5 = (0.75f * f2) - f4;
77+
float f6 = 0.0f;
78+
int i3 = 0;
79+
int i4 = 0;
80+
for (int i5 = 0; i5 < tabCount; i5++) {
81+
Log.d("BottomNavigationView", "i : " + i5 + ", width : " + fArr[i5]);
82+
if (f5 < fArr[i5].floatValue()) {
83+
i3 = (int) (((float) i3) + (fArr[i5].floatValue() - f5));
84+
fArr[i5] = Float.valueOf(f5);
85+
i4++;
86+
f6 = f5;
87+
} else if (f6 < fArr[i5].floatValue()) {
88+
f6 = fArr[i5].floatValue();
89+
}
90+
}
91+
float f7 = f - ((float) i3);
92+
setTabMode(0);
93+
Log.d("BottomNavigationView", "[MODE_SCROLLABLE]");
94+
Log.d("BottomNavigationView", "availableContentWidth : " + i2 + ", tabTextPaddingLeftRight : " + dimensionPixelSize2);
95+
ViewGroup viewGroup = (ViewGroup) getChildAt(0);
96+
int i6 = (tabCount - i4) * 2;
97+
int i7 = i6 > 0 ? ((int) ((f2 - f7) - ((((float) i4) * dimensionPixelSize2) * 2.0f))) / i6 : 0;
98+
int i8 = (int) dimensionPixelSize2;
99+
int i9 = -1;
100+
boolean z = true;
101+
if (i7 < i8) {
102+
i7 = i8;
103+
} else {
104+
float f8 = f6 + dimensionPixelSize2 + dimensionPixelSize2;
105+
if (f3 >= f8) {
106+
setTabMode(1);
107+
for (int i10 = 0; i10 < tabCount; i10++) {
108+
((ViewGroup) viewGroup.getChildAt(i10)).getChildAt(0).getLayoutParams().width = -1;
109+
getTabAt(i10).seslGetTextView().setMaxWidth(i2);
110+
getTabAt(i10).seslGetTextView().setMinimumWidth(0);
111+
getTabAt(i10).seslGetTextView().setPadding(0, 0, 0, 0);
112+
}
113+
Log.d("BottomNavigationView", "[MODE_FIXED] TabCount : " + tabCount + ", minNeededTabWidth : " + f3 + ", maxTabWidth : " + f8);
114+
return;
115+
}
116+
}
117+
int i11 = 0;
118+
while (i11 < tabCount) {
119+
boolean z2 = fArr[i11].floatValue() >= f5 ? z : false;
120+
int floatValue = (int) (fArr[i11].floatValue() + ((z2 ? dimensionPixelSize2 : (float) i7) * 2.0f));
121+
ViewGroup.LayoutParams layoutParams = viewGroup.getChildAt(i11).getLayoutParams();
122+
layoutParams.width = floatValue;
123+
layoutParams.height = i9;
124+
viewGroup.getChildAt(i11).setMinimumWidth(floatValue);
125+
int i12 = z2 ? 0 : (int) (((float) i7) - dimensionPixelSize2);
126+
getTabAt(i11).seslGetTextView().setMaxWidth((int) f5);
127+
getTabAt(i11).seslGetTextView().setMinimumWidth(floatValue - ((int) f4));
128+
getTabAt(i11).seslGetTextView().setPadding(i12, 0, i12, 0);
129+
Log.d("BottomNavigationView", "params.width : " + layoutParams.width + ", tabWidthList[" + i11 + "] : " + fArr[i11] + ", LeftRightPadding : " + (i7 * 2));
130+
i11++;
131+
i9 = -1;
132+
z = true;
133+
}
134+
requestLayout();
135+
}
136+
}
137+
56138
private void invalidateTabLayout() {
57139
ArrayList<Float> tabTextWidthList = new ArrayList<>();
58140
float tabTextWidthSum = 0.0f;

0 commit comments

Comments
 (0)