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

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

       

Quiero cambiar el color de fondo de una pestaña cuando se selecciona

Lo que finalmente funcionó para mí es similar a lo que sugirió @ 如果 我 suggested DJ, 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 :

  

y el selector res/drawable/tab_color_selector.xml :

      

Puedes intentar esto:

  

En tu archivo xml de fondo:

     

Agregar atributo en xml:

  

Y crea en la carpeta dibujable, tab_color_selector.xml

      

¿Has probado la API ?

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

Puedes tenerlo en el xml.

  

Puede cambiar el fondo o el color de la 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)); } } } 

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