tablayout studio color change android android-tabs android-tablayout

android - studio - ¿Cómo cambio el color de fondo de una pestaña cuando uso TabLayout?



android tablayout change text color (9)

Este es mi código en la actividad principal

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); } }

Y este es mi código en el 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>

Quiero cambiar el color de fondo de una pestaña cuando está seleccionada


¿Has intentado verificar la API ?

Deberá crear un detector para el evento OnTabSelectedListener , luego, cuando un usuario seleccione cualquier pestaña, debe verificar si es la correcta, luego cambiar el color de fondo usando tabLayout.setBackgroundColor(int color) , o si no es la correcta pestaña, asegúrese de volver a cambiar al color normal nuevamente con el mismo método.


Añadir atributo en xml:

<android.support.design.widget.TabLayout .... app:tabBackground="@drawable/tab_color_selector" ... />

Y cree en una carpeta dibujable, 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>


Como encontré la mejor y más adecuada opción para mí, también funcionará con la animación.

Puede usar el indicator como fondo.

Puede configurar la app:tabIndicatorGravity="stretch" atributo app:tabIndicatorGravity="stretch" para usar como fondo.

Ejemplo:

<android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorGravity="stretch" app:tabSelectedTextColor="@color/white" app:tabTextColor="@color/colorAccent"> <android.support.design.widget.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chef" /> <android.support.design.widget.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="User" /> </android.support.design.widget.TabLayout>

Espero que te ayude.


Lo que finalmente funcionó para mí es similar a lo que @ 是 我 是 DJ sugirió, pero el tabBackground debe estar en el archivo de layout y no dentro del style , por lo que se ve así:

res/layout/somefile.xml :

<android.support.design.widget.TabLayout .... app:tabBackground="@drawable/tab_color_selector" ... />

y el selector 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>


Puede cambiar el color de fondo de la pestaña con este atributo

<android.support.design.widget.TabLayout android:id="@+id/tabs" style="@style/CategoryTab" android:layout_width="match_parent" android:layout_height="wrap_content" ''android:background="@color/primary_color"/>''


Puede cambiar el color de fondo o ondulación de cada pestaña de esta manera:

//set ripple color for each tab for(int n = 0; n < mTabLayout.getTabCount(); n++){ View tab = ((ViewGroup)mTabLayout.getChildAt(0)).getChildAt(n); if(tab != null && tab.getBackground() instanceof RippleDrawable){ RippleDrawable rippleDrawable = (RippleDrawable)tab.getBackground(); if (rippleDrawable != null) { rippleDrawable.setColor(ColorStateList.valueOf(rippleColor)); } } }


Puedes probar esto:

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout"> <item name="tabBackground">@drawable/background</item> </style>

En su archivo xml de fondo:

<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>


Puedes tenerlo en el 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"/>


Una de las soluciones más simples es cambiar colorPrimary del archivo colors.xml.