使用TabLayout时如何更改选项卡背景颜色?

Joe*_*ara 104 android android-tabs android-tablayout

这是我在主要活动中的代码

public class FilterActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_filter);

    // Get the ViewPager and set it's PagerAdapter so that it can display items
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager(), FilterActivity.this);
    viewPager.setAdapter(pageAdapter);

    // Give the TabLayout the ViewPager
    final TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
    tabLayout.setupWithViewPager(viewPager);



  }
}
Run Code Online (Sandbox Code Playgroud)

这是我在XML中的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include
        android:id="@+id/app_bar"
        layout="@layout/app_bar">
    </include>

    <android.support.design.widget.TabLayout
        android:id="@+id/sliding_tabs"
        android:layout_width="fill_parent"
        style="@style/MyCustomTabLayout"
        android:layout_height="48dp"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:background="@android:color/white" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我想在选中时更改一个标签的背景颜色

Tak*_*ako 256

最终对我有用的东西类似于@如果我是DJ建议的,但它tabBackground应该在layout文件中,而不是在里面style,所以它看起来像:

res/layout/somefile.xml:

<android.support.design.widget.TabLayout
    ....
    app:tabBackground="@drawable/tab_color_selector"
    ...
    />
Run Code Online (Sandbox Code Playgroud)

和选择器 res/drawable/tab_color_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/tab_background_selected" android:state_selected="true"/>
    <item android:drawable="@color/tab_background_unselected"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

  • 我怎么能以编程方式执行此操作? (4认同)
  • 您还可以为该属性添加颜色值:ie:app:tabBackground:@ color/colorAccent (2认同)

如果我*_*是DJ 19

你可以试试这个:

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
    <item name="tabBackground">@drawable/background</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在你的后台xml文件中:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@color/white" />
    <item android:drawable="@color/black" />
</selector>
Run Code Online (Sandbox Code Playgroud)


小智 11

在xml中添加属性:

<android.support.design.widget.TabLayout
    ....
    app:tabBackground="@drawable/tab_color_selector"
    ...
    />
Run Code Online (Sandbox Code Playgroud)

并在drawable文件夹中创建tab_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/tab_background_selected" android:state_selected="true"/>
    <item android:drawable="@color/tab_background_unselected"/>
</selector>
Run Code Online (Sandbox Code Playgroud)


rex*_*xar 6

经过一些混乱之后,这就是我获得所需外观的方式(至少在模拟器中),并且它保持了连锁反应。

带有带有颜色参数的选项卡选择器的选项卡布局

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabBackground="@drawable/tab_selector"
    app:tabIconTint="@drawable/tab_selector"
    app:tabIconTintMode="src_atop"
    app:tabTextColor="@drawable/tab_selector" />
Run Code Online (Sandbox Code Playgroud)

还有@drawable/tab_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorPrimary" android:drawable="@color/colorPrimaryDark" android:state_selected="true" />
    <item android:color="@color/colorPrimaryDark" android:drawable="@color/colorPrimary" />
</selector>
Run Code Online (Sandbox Code Playgroud)

color仅供参考:这是在我将参数添加到之前模拟器显示的内容@drawable/tab_selector

带有不带颜色参数的选项卡选择器的选项卡布局


sor*_*end 5

您是否尝试过检查API

您需要为该OnTabSelectedListener事件创建一个侦听器,然后当用户选择任何选项卡时,您应该检查它是否正确,然后使用 更改背景颜色tabLayout.setBackgroundColor(int color),或者如果它不是正确的选项卡,请确保您更改回用同样的方法再次恢复正常颜色。


Xur*_*ajB 5

您可以在 xml 中使用它。

<android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        app:tabTextColor="@color/colorGray"
        app:tabSelectedTextColor="@color/colorWhite"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)


小智 5

我能找到的方法之一是使用这样的标签指示器:

<com.google.android.material.tabs.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabBackground="@color/normal_unselected_color"
    app:tabIndicatorColor="@color/selected_color"
    app:tabIndicatorGravity="center"
    app:tabIndicatorHeight="150dp"
    app:tabSelectedTextColor="@color/selected_text_color"
    app:tabTextColor="@color/unselected_text_color">

    ..... tab items here .....

</com.google.android.material.tabs.TabLayout>
Run Code Online (Sandbox Code Playgroud)

诀窍是:

  • 使选项卡指示器居中对齐
  • 使指示器高度足够大,以覆盖整个标签

这也可以在切换选项卡时处理流畅的动画