Nar*_*C.R 24 android android-layout android-tablayout
是否有任何方法可以相对于标题标题包裹标签指示符宽度?
leo*_*eon 31
是的,可以将标签指示符作为标题设置填充包装为0
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);
layoutParams.leftMargin = start;
layoutParams.rightMargin = end;
} else {
layoutParams.leftMargin = start;
layoutParams.rightMargin = end;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:从现在开始com.android.support:design:28.0.0
,您可以轻松地将指标调整为标签:
app:tabIndicatorFullWidth="false"
Mal*_*azi 13
从支持库28开始,您可以执行以下操作:
app:tabIndicatorFullWidth="false"
app:tabPaddingStart="25dp"
app:tabPaddingEnd="25dp"
Run Code Online (Sandbox Code Playgroud)
您可以设置影响选项卡指示符的所需填充.
你现在也可以这样做:
app:tabIndicator="@drawable/tab_indicator"
Run Code Online (Sandbox Code Playgroud)
这将设置一个自定义drawable作为指标.
自定义drawable的示例:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorPrimary"/>
<corners android:radius="5dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
如果你不需要条带小于文本,那么这应该工作:
public static void reduceMarginsInTabs(TabLayout tabLayout, int marginOffset) {
View tabStrip = tabLayout.getChildAt(0);
if (tabStrip instanceof ViewGroup) {
ViewGroup tabStripGroup = (ViewGroup) tabStrip;
for (int i = 0; i < ((ViewGroup) tabStrip).getChildCount(); i++) {
View tabView = tabStripGroup.getChildAt(i);
if (tabView.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
((ViewGroup.MarginLayoutParams) tabView.getLayoutParams()).leftMargin = marginOffset;
((ViewGroup.MarginLayoutParams) tabView.getLayoutParams()).rightMargin = marginOffset;
}
}
tabLayout.requestLayout();
}
}
Run Code Online (Sandbox Code Playgroud)
对于添加的点,您可以检查每个标题的文本大小.
小智 7
一种简单的解决方案是:
tabLayout.setTabIndicatorFullWidth(false);
Run Code Online (Sandbox Code Playgroud)
但它适用于最新的依赖项,例如
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support:design:28.0.0'
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以这样做:
布局/layout_demo.xml
<com.google.android.material.tabs.TabLayout
app:tabIndicatorFullWidth="false"
app:tabIndicator="@drawable/tab_indicator"
.../>
Run Code Online (Sandbox Code Playgroud)
res/tab_indicator.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="center">
<shape>
<size
android:width="51dp"
android:height="3dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23407 次 |
最近记录: |