【问题标题】:Customise TabLayout Indicator. Making Tab Indicator Round Corner?自定义 TabLayout 指示器。制作标签指示器圆角?
【发布时间】:2017-07-09 10:14:42
【问题描述】:

我只想制作标签指示器圆角而不是整个标签。我曾尝试设置自定义视图,但它没有帮助我。任何帮助,将不胜感激。谢谢

【问题讨论】:

标签: android view android-tablayout


【解决方案1】:

其实很简单,您要做的就是制作一个带有圆角的自定义形状并将其设置为您的 tabIndicator。

这是名为custom_tab_indicator.xml的圆角形状

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/colorAccent" />
    <corners
        android:bottomLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />
</shape>

然后像这样在tabLayout中设置为tabIndicator。

<com.google.android.material.tabs.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabIndicator="@drawable/custom_tab_indicator"
    app:tabIndicatorFullWidth="false"
    app:tabIndicatorHeight="3dp" />

这应该会给你边缘圆润的效果。

【讨论】:

    【解决方案2】:

    您可以尝试使用自定义矢量图像为您的 TabLayout 设置 tabIndicator。

    <com.google.android.material.tabs.TabLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            app:tabIndicator="@drawable/custom_tab_indicator"
            app:tabTextAppearance="?textAppearanceH3"
            app:tabMode="auto">
    

    下面是您的 custom_tab_indicator.xml:

    <vector
        android:height="4dp"
        android:width="24dp"
        android:viewportHeight="4.0"
        android:viewportWidth="24.0"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <path
            android:strokeWidth="4"
            android:fillColor="@color/red"
            android:strokeColor="@color/red"
            android:strokeLineCap="round"
            android:pathData="M12,4 H12, 4 z"/>
    </vector>
    

    【讨论】:

      【解决方案3】:

      在支持库 28 中,您可以使用 app:tabIndicator 设置您的自定义可绘制形状。

      因此您可以执行以下操作:

      创建带有圆角的自定义形状指示器,除此之外,您可以设置形状的左侧、右侧和底部的边距,以便更正确地显示舍入(因此指示器不会接触到屏幕边缘或查看)

      <?xml version="1.0" encoding="utf-8"?>
      <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
          <item
              android:end="2dp"
              android:start="2dp"
              android:bottom="2dp">
              <shape android:shape="rectangle">
                  <corners android:radius="20dp" />
                  <solid android:color="@color/colorAccent" />
              </shape>
          </item>
      </layer-list>
      

      然后在你的 TabLayout xml 中设置 drawable app:tabIndicator="@drawable/shape_tab_indicator"

      您也可以设置app:tabIndicatorFullWidth="false",而不是为形状项设置边距。

      【讨论】:

        【解决方案4】:

        你可以使用这个库CircularIndicatorTabLayout

        安装

        • 你可以从here下载库的aar文件
        • circular-idicator-tab-layout-1.0.0.aar 移动到 app/libs
        • 在项目 build.gradle 文件中添加存储库{ flatDir { dirs 'libs' } }
        • app build.gradle 文件中添加compile(name: 'circular-idicator-tab-layout-1.0.0', ext: 'aar')

        示例

        • 在你的布局文件中添加

          <np.com.ngimasherpa.citablayout.CircularIndicatorTabLayout
              android:id="@+id/tab_monitoring_criteria"
              android:layout_width="match_parent"
              android:layout_height="@dimen/spacing_72"
              app:iconColor="@color/colorPrimaryDark"
              app:indicatorColor="@color/colorAccent"
              app:indicatorPosition="bottom"
              app:lineColor="@android:color/holo_red_dark"
              app:lineEnabled="true"
              app:mode="fixed"
              app:selectedIconColor="@color/colorAccent"
              app:tabViewIconId="@+id/iconTabViewLayout"
              app:tabViewLayoutId="@layout/tab_layout"
              app:tabViewTextViewColor="@color/colorPrimaryDark"
              app:tabViewTextViewId="@+id/textTabViewLayout"
              app:tabViewTextViewSelectedColor="@color/colorAccent"
              app:tab_gravity="fill" />
          
        • 在你的 java 文件中

          SectionPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
          ViewPager mViewPager = (ViewPager) findViewById(R.id.container);
          CircularIndicatorTabLayout tabLayout = (CircularIndicatorTabLayout) findViewById(R.id.tab_monitoring_criteria);  
          mViewPager.setAdapter(mSectionsPagerAdapter);
          tabLayout.setupWithViewPager(mViewPager);
          tabLayout.setIcons(R.drawable.ic_arrow_drop_down, R.drawable.ic_audiotrack, R.drawable.ic_beach);
          

        【讨论】:

          猜你喜欢
          • 2020-02-09
          • 1970-01-01
          • 2020-05-29
          • 2021-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-13
          • 1970-01-01
          相关资源
          最近更新 更多