带圆角的Android选项卡布局选项卡

带圆角的Android选项卡布局选项卡,android,android-layout,android-tablayout,Android,Android Layout,Android Tablayout,这类问题以前已经被问过,但没有得到任何合适的、有效的解决方案,所以我再次发布这个问题。很抱歉再次问,浪费了您的时间。 请给出一些有效的解决方案。或者如果我做错了什么,请告诉我。 提前谢谢 预期选项卡: 但接下来会是: 未来标签 页面上的加载选项卡类似于“预期选项卡”图像,但选择后类似于“未来选项卡”图像。 MainXML代码: <android.support.design.widget.TabLayout android:id="@+id/tabs"

这类问题以前已经被问过,但没有得到任何合适的、有效的解决方案,所以我再次发布这个问题。很抱歉再次问,浪费了您的时间。 请给出一些有效的解决方案。或者如果我做错了什么,请告诉我。 提前谢谢

预期选项卡:

但接下来会是:

未来标签

页面上的加载选项卡类似于“预期选项卡”图像,但选择后类似于“未来选项卡”图像。 MainXML代码:

 <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                style="@style/MyCustomTabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/background_img_jpeg"
                android:minHeight="10dp"
                android:padding="10dp"
                app:tabGravity="fill"
                app:tabIndicatorColor="@color/TRANSPARENT"
                app:tabMode="fixed"
                app:tabTextColor="@color/blue" />
<android.support.design.widget.TabLayout
        android:layout_margin="@dimen/activity_vertical_margin"
        android:id="@+id/tabs"
        app:tabTextColor="@color/white"
        app:tabSelectedTextColor="@color/white"
        app:tabIndicatorColor="#00000000"
        android:layout_width="match_parent"
        android:layout_height="40dp" />
tabLayout = (TabLayout)view.findViewById(R.id.tabs);
        tabLayout.addTab(tabLayout.newTab().setText("Tab1"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab2"));
        setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if(tabLayout.getSelectedTabPosition()==0) {
                    setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
                }
                else {
                    setTabBG(R.drawable.tab_left_unselect,R.drawable.tab_right_select);
                }
            }
            ....
        });

private void setTabBG(int tab1, int tab2){
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
            ViewGroup tabStrip = (ViewGroup) tabLayout.getChildAt(0);
            View tabView1 = tabStrip.getChildAt(0);
            View tabView2 = tabStrip.getChildAt(1);
            if (tabView1 != null) {
                int paddingStart = tabView1.getPaddingStart();
                int paddingTop = tabView1.getPaddingTop();
                int paddingEnd = tabView1.getPaddingEnd();
                int paddingBottom = tabView1.getPaddingBottom();
                ViewCompat.setBackground(tabView1, AppCompatResources.getDrawable(tabView1.getContext(), tab1));
                ViewCompat.setPaddingRelative(tabView1, paddingStart, paddingTop, paddingEnd, paddingBottom);
            }

            if (tabView2 != null) {
                int paddingStart = tabView2.getPaddingStart();
                int paddingTop = tabView2.getPaddingTop();
                int paddingEnd = tabView2.getPaddingEnd();
                int paddingBottom = tabView2.getPaddingBottom();
                ViewCompat.setBackground(tabView2, AppCompatResources.getDrawable(tabView2.getContext(), tab2));
                ViewCompat.setPaddingRelative(tabView2, paddingStart, paddingTop, paddingEnd, paddingBottom);
            }
        }
    }

我认为你应该使用4种形状: 1)未选择左按钮 2)选择左按钮 3)未选择右按钮 4)选择右键

然后写入选择器以用于按钮背景,请参见左侧按钮的示例(右侧类似):



有关更多详细信息,请访问此处

我认为你应该在所有角落使用

 <?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
     <gradient 
         android:startColor="#SomeGradientBeginColor"
         android:endColor="#SomeGradientEndColor" 
         android:angle="270"/> 

    <corners 
         android:bottomRightRadius="7dp" 
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp" 
         android:topRightRadius="7dp"/> 
</shape> 

检查如何在按钮或布局中使用此选项


以下代码的结果:

 <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                style="@style/MyCustomTabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/background_img_jpeg"
                android:minHeight="10dp"
                android:padding="10dp"
                app:tabGravity="fill"
                app:tabIndicatorColor="@color/TRANSPARENT"
                app:tabMode="fixed"
                app:tabTextColor="@color/blue" />
<android.support.design.widget.TabLayout
        android:layout_margin="@dimen/activity_vertical_margin"
        android:id="@+id/tabs"
        app:tabTextColor="@color/white"
        app:tabSelectedTextColor="@color/white"
        app:tabIndicatorColor="#00000000"
        android:layout_width="match_parent"
        android:layout_height="40dp" />
tabLayout = (TabLayout)view.findViewById(R.id.tabs);
        tabLayout.addTab(tabLayout.newTab().setText("Tab1"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab2"));
        setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if(tabLayout.getSelectedTabPosition()==0) {
                    setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
                }
                else {
                    setTabBG(R.drawable.tab_left_unselect,R.drawable.tab_right_select);
                }
            }
            ....
        });

private void setTabBG(int tab1, int tab2){
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
            ViewGroup tabStrip = (ViewGroup) tabLayout.getChildAt(0);
            View tabView1 = tabStrip.getChildAt(0);
            View tabView2 = tabStrip.getChildAt(1);
            if (tabView1 != null) {
                int paddingStart = tabView1.getPaddingStart();
                int paddingTop = tabView1.getPaddingTop();
                int paddingEnd = tabView1.getPaddingEnd();
                int paddingBottom = tabView1.getPaddingBottom();
                ViewCompat.setBackground(tabView1, AppCompatResources.getDrawable(tabView1.getContext(), tab1));
                ViewCompat.setPaddingRelative(tabView1, paddingStart, paddingTop, paddingEnd, paddingBottom);
            }

            if (tabView2 != null) {
                int paddingStart = tabView2.getPaddingStart();
                int paddingTop = tabView2.getPaddingTop();
                int paddingEnd = tabView2.getPaddingEnd();
                int paddingBottom = tabView2.getPaddingBottom();
                ViewCompat.setBackground(tabView2, AppCompatResources.getDrawable(tabView2.getContext(), tab2));
                ViewCompat.setPaddingRelative(tabView2, paddingStart, paddingTop, paddingEnd, paddingBottom);
            }
        }
    }

使用4种形状(不需要选择器),如:

 <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                style="@style/MyCustomTabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/background_img_jpeg"
                android:minHeight="10dp"
                android:padding="10dp"
                app:tabGravity="fill"
                app:tabIndicatorColor="@color/TRANSPARENT"
                app:tabMode="fixed"
                app:tabTextColor="@color/blue" />
<android.support.design.widget.TabLayout
        android:layout_margin="@dimen/activity_vertical_margin"
        android:id="@+id/tabs"
        app:tabTextColor="@color/white"
        app:tabSelectedTextColor="@color/white"
        app:tabIndicatorColor="#00000000"
        android:layout_width="match_parent"
        android:layout_height="40dp" />
tabLayout = (TabLayout)view.findViewById(R.id.tabs);
        tabLayout.addTab(tabLayout.newTab().setText("Tab1"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab2"));
        setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if(tabLayout.getSelectedTabPosition()==0) {
                    setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
                }
                else {
                    setTabBG(R.drawable.tab_left_unselect,R.drawable.tab_right_select);
                }
            }
            ....
        });

private void setTabBG(int tab1, int tab2){
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
            ViewGroup tabStrip = (ViewGroup) tabLayout.getChildAt(0);
            View tabView1 = tabStrip.getChildAt(0);
            View tabView2 = tabStrip.getChildAt(1);
            if (tabView1 != null) {
                int paddingStart = tabView1.getPaddingStart();
                int paddingTop = tabView1.getPaddingTop();
                int paddingEnd = tabView1.getPaddingEnd();
                int paddingBottom = tabView1.getPaddingBottom();
                ViewCompat.setBackground(tabView1, AppCompatResources.getDrawable(tabView1.getContext(), tab1));
                ViewCompat.setPaddingRelative(tabView1, paddingStart, paddingTop, paddingEnd, paddingBottom);
            }

            if (tabView2 != null) {
                int paddingStart = tabView2.getPaddingStart();
                int paddingTop = tabView2.getPaddingTop();
                int paddingEnd = tabView2.getPaddingEnd();
                int paddingBottom = tabView2.getPaddingBottom();
                ViewCompat.setBackground(tabView2, AppCompatResources.getDrawable(tabView2.getContext(), tab2));
                ViewCompat.setPaddingRelative(tabView2, paddingStart, paddingTop, paddingEnd, paddingBottom);
            }
        }
    }
  • tab_left_select.xml

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item >
            <shape android:shape="rectangle">
                <solid android:color="@color/blue" />
                <corners
                    android:topLeftRadius="8dp"
                    android:bottomLeftRadius="8dp">
                </corners>
            </shape>
        </item>
    </layer-list>
    

    在StackOverflow上为我不记得它在哪里的创造性开发人员形成一个先前的答案,这可以通过将卡片视图作为TabLayout的父视图轻松完成


    您可以使用材质CardView和适当的cardCornerRadius作为
    表格布局的父布局,以实现此单面圆角背景。然后,您可以使用选项卡指示颜色为选项卡所选布局着色。希望这对你有帮助。谢谢

    代码段:

    
    
    输出:
    通过材质设计,我们可以简单地使用材质按钮切换组并为选项卡添加材质按钮

    <com.google.android.material.button.MaterialButtonToggleGroup
                android:id="@+id/buttonGroup"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                app:checkedButton="@+id/nearest">
    
                <com.google.android.material.button.MaterialButton
                    android:id="@+id/nearest"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="Nearest" />
    
                <com.google.android.material.button.MaterialButton
                    android:id="@+id/alphabetical"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="Alphabetical"/>
    
            </com.google.android.material.button.MaterialButtonToggleGroup>
    
    
    

    参考此链接了解更多信息-

    我想分享我的答案:(在我的情况下,我只需在tabLayout上方添加Cardview并设置半径角)


    如果有人要查找此类型,请查看选项卡布局(如下图所示)

    <style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
            <item name="tabBackground">@drawable/tab_bg</item>
        </style>
    
    <com.google.android.material.tabs.TabLayout
            android:id="@+id/images_videos_tab_layout"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_20sdp"
            android:layout_marginStart="@dimen/_10sdp"
            android:layout_marginEnd="@dimen/_10sdp"
            android:layout_marginTop="@dimen/_10sdp"
            android:background="@drawable/tabview_bg"
            app:tabGravity="fill"
            app:tabIndicatorColor="@android:color/transparent"
            app:tabMode="fixed"
            app:tabIndicatorHeight="0dp"
            app:tabRippleColor="@null"
            app:tabSelectedTextColor="@android:color/white"
             />
    

    在Xml表格布局中

    <style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
            <item name="tabBackground">@drawable/tab_bg</item>
        </style>
    
    <com.google.android.material.tabs.TabLayout
            android:id="@+id/images_videos_tab_layout"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_20sdp"
            android:layout_marginStart="@dimen/_10sdp"
            android:layout_marginEnd="@dimen/_10sdp"
            android:layout_marginTop="@dimen/_10sdp"
            android:background="@drawable/tabview_bg"
            app:tabGravity="fill"
            app:tabIndicatorColor="@android:color/transparent"
            app:tabMode="fixed"
            app:tabIndicatorHeight="0dp"
            app:tabRippleColor="@null"
            app:tabSelectedTextColor="@android:color/white"
             />
    
    可拉伸的

    1.tab_bg_正常

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/transparent" />
    </shape>
    
    
    
    2.tab_bg_正常_蓝色

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/baseThemeColor" />
    <corners android:radius="25dp" />
    </shape>
    
    
    
    3.tabview\u bg

    <?xml version="1.0" encoding="utf-8"?>
    <shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="25dp"/>
    <stroke android:color="@color/baseThemeColor" android:width="1dp"/>
    <solid android:color="#00000000"/>
    </shape>
    

    选择第二个选项卡后,它将像我上面的问题中提到的“未来选项卡”一样出现。