首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在所有TabLayout选项卡周围添加圆角,并在Android上为内标签边框设置方形角

如何在所有TabLayout选项卡周围添加圆角,并在Android上为内标签边框设置方形角
EN

Stack Overflow用户
提问于 2021-09-03 15:23:31
回答 1查看 247关注 0票数 3

我当前的Android应用程序使用了一个com.google.android.material.tabs.TabLayout

有三个标签。

我希望有一个圆角边框(由一个笔画宽度= 2dp,而不是全彩色)围绕在三个标签周围。不过,我想要三个标签之间的直线。

我非常接近期望的效果,但我被困在圆角和方角。有什么简单的方法来达到我想要的结果吗?

这是我用过的抽屉

代码语言:javascript
运行
复制
 <com.google.android.material.tabs.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin4"
            android:background="@drawable/tab_layout_round_border"
            app:tabBackground="@drawable/tab_layout_border"
            app:tabGravity="fill"
            app:tabIndicatorHeight="0dp"
            app:tabMode="fixed"
            app:tabPaddingEnd="0dp"
            app:tabPaddingStart="0dp"
            app:tabTextAppearance="@style/Tab.TextAppearance.Literal"
            app:tabTextColor="?android:attr/textColorPrimary" />

@drawable/tab_layout_round_border

代码语言:javascript
运行
复制
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="2dp"
        android:color="@color/secondaryColor" />
    <solid android:color="@android:color/transparent" />
    <corners android:radius="5dp" />
    <padding
        android:bottom="0dp"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp" />
</shape>

@drawable/tab_layout_border

代码语言:javascript
运行
复制
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="1dp"
        android:color="@color/secondaryColor" />
    <solid android:color="@android:color/transparent" />
    <corners android:radius="0dp" />
    <padding
        android:bottom="0dp"
        android:left="0dp"
        android:right="0dp"
        android:top="0dp" />
</shape>

这是它的相似之处

完成这项工作后,我还需要填写所选的选项卡,其颜色与用边框绘制的颜色相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 19:25:59

相反,可以用xml定义app:tabBackground="@drawable/tab_layout_border",您可以通过编程方式将其应用于特定的TabItem。当您用xml定义它,它会导致冲突,我的意思是将它应用于您的所有三个项。如果我们查看您附加的图像,那么我们可以看到第一个、一个和最后一个三个项目在这里制造问题。

因此,我们将尝试将tab_layout_border仅应用于项目2中。我不确定这对你的项目是否有帮助,但你可以检查-

代码语言:javascript
运行
复制
 <com.google.android.material.tabs.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/margin4"
    android:background="@drawable/tab_layout_round_border"
    app:tabGravity="fill"
    app:tabIndicatorHeight="0dp"
    app:tabMode="fixed"
    app:tabPaddingEnd="0dp"
    app:tabPaddingStart="0dp"
    app:tabTextAppearance="@style/Tab.TextAppearance.Literal"
    app:tabTextColor="?android:attr/textColorPrimary" />

此外,还可以在@drawable/tab_layout_边框中使用笔画宽度= 2dp。

代码语言:javascript
运行
复制
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
    android:width="2dp"
    android:color="@color/secondaryColor" />
<solid android:color="@android:color/transparent" />
<corners android:radius="0dp" />
<padding
    android:bottom="0dp"
    android:left="0dp"
    android:right="0dp"
    android:top="0dp" />

示例代码-

代码语言:javascript
运行
复制
    TabLayout tabLayout = findViewById(R.id.tab);
    tabLayout.addTab(tabLayout.newTab().setText("One"));
    tabLayout.addTab(tabLayout.newTab().setText("Two"));
    tabLayout.addTab(tabLayout.newTab().setText("Tree"));

    ViewGroup tabItem = (ViewGroup) tabLayout.getChildAt(0);
    for (int i = 0; i < tabItem.getChildCount(); i++) {
        View tabView = tabItem.getChildAt(i);
        if (tabView !=null && i == 1) {
            int paddingStart = tabView.getPaddingStart();
            int paddingTop = tabView.getPaddingTop();
            int paddingEnd = tabView.getPaddingEnd();
            int paddingBottom = tabView.getPaddingBottom();
            ViewCompat.setBackground(tabView, AppCompatResources.getDrawable(getApplicationContext(), R.drawable.tab_layout_border));
            ViewCompat.setPaddingRelative(tabView, paddingStart, paddingTop, paddingEnd, paddingBottom);

        }
    }

产出-

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69047296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档