Vis*_*ese 12
有一种更简单的方法可以实现这一点,只需drawable
向app:tabIndicator
.
例如,在这种情况下:
下划线.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<item android:gravity="center">
<shape>
<size
android:width="22dp"
android:height="2dp" />
<corners android:radius="2dp" />
<solid android:color="#FF0000" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
TabLayout
并以这种方式将其添加到您的中
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16dp"
android:layout_marginTop="@dimen/_16dp"
app:tabIndicator="@drawable/underline"
app:tabIndicatorColor="@color/offers_header_text"
app:tabIndicatorHeight="4dp"
app:tabMode="scrollable"
app:tabRippleColor="@null" />
Run Code Online (Sandbox Code Playgroud)
尝试这个:
public void wrapTabIndicatorToTitle(TabLayout tabLayout, int externalMargin, int internalMargin) {
View tabStrip = tabLayout.getChildAt(0);
if (tabStrip instanceof ViewGroup) {
ViewGroup tabStripGroup = (ViewGroup) tabStrip;
int childCount = ((ViewGroup) tabStrip).getChildCount();
for (int i = 0; i < childCount; i++) {
View tabView = tabStripGroup.getChildAt(i);
//set minimum width to 0 for instead for small texts, indicator is not wrapped as expected
tabView.setMinimumWidth(0);
// set padding to 0 for wrapping indicator as title
tabView.setPadding(0, tabView.getPaddingTop(), 0, tabView.getPaddingBottom());
// setting custom margin between tabs
if (tabView.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) tabView.getLayoutParams();
if (i == 0) {
// left
settingMargin(layoutParams, externalMargin, internalMargin);
} else if (i == childCount - 1) {
// right
settingMargin(layoutParams, internalMargin, externalMargin);
} else {
// internal
settingMargin(layoutParams, internalMargin, internalMargin);
}
}
}
tabLayout.requestLayout();
}
}
private void settingMargin(ViewGroup.MarginLayoutParams layoutParams, int start, int end) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
layoutParams.setMarginStart(start);
layoutParams.setMarginEnd(end);
} else {
layoutParams.leftMargin = start;
layoutParams.rightMargin = end;
}
}
Run Code Online (Sandbox Code Playgroud)
在 java 文件中设置视图寻呼机后添加:
wrapTabIndicatorToTitle(tabLayout,80,80);
Run Code Online (Sandbox Code Playgroud)