Utilice diferentes colores para diferentes ActionBar.Tab

Quiero que todas las pestañas de ActionBar tengan diferentes indicadores de color, por ejemplo, azul para la pestaña 1, rojo para la pestaña 2, etc.

Para lograrlo creé diferentes selectores para todos los colores y los puse en diferentes xmls en drawable. En style.xml los estoy llamando por

<style name="MyTheme" parent="AppBaseTheme"> <item name="android:actionBarTabStyle">@style/ActionBarTabStyleRed</item> </style> <style name="ActionBarTabStyleRed"> <item name="android:background">@drawable/tab_indicator_red</item> </style> 

He creado ese estilo para diferentes colores también. Ahora cuando cambio el dibujable o el estilo al color diferente, trabaja. Puedo ver los colores que se aplican a las pestañas. Pero ya que todas las pestañas son del mismo color, no resolvió mi propósito. Intenté fijar el estilo de las lengüetas en onTabSelected() pero no hay método para hacer eso.

En última instancia, traté de crear diferentes temas para diferentes colores y trató de establecerlos de forma programada en onTabSelected() , pero luego he llegado a saber que el tema debe ser establecido antes setContentView() .
Así que mis preguntas son … ¿Cómo puedo hacer eso? ¿Hay alguna manera que puedo tener diferentes colores para diferentes indicadores de pestañas ???

Actualizar:-
el dibujable / tab_indicator_red.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_red" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_red" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_red" /> <!-- Pressed --> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_red" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_red" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_red" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_red" /> </selector> 

Creo que tengo un punto de partida para ti, pero es un poco complicado. Configuración de la barra de acción con el código siguiente, puede configurar las pestañas para utilizar aspecto personalizado:

  //...somewhere in oncreate ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab tab1 = bar.newTab(); TextView tv1 = createTab("Tab 1", R.drawable.firsttabdrawable); tab1.setCustomView(tv1); tab1.setTabListener(this); ActionBar.Tab tab2 = bar.newTab(); tab2.setCustomView(createTab("Tab 2", R.drawable.secondTabDrawable)); tab2.setTabListener(this); ActionBar.Tab tab3 = bar.newTab(); tab3.setCustomView(createTab("Tab 3", R.drawable.thirdTabDrawable)); tab3.setTabListener(this); ActionBar.Tab tab4 = bar.newTab(); tab4.setCustomView(createTab("Tab 4", R.drawable.fourthTabDrawable)); tab4.setTabListener(this); bar.addTab(tab1); bar.addTab(tab2); bar.addTab(tab3); bar.addTab(tab4); 

createTab como sigue:

  private TextView createTab(String titleText, int tabBackgroundDrawableId) { TextView tv = new TextView(this); //set caption and caption appearance tv.setTextAppearance(this, R.style.MyDefaultTabTextAppearance); tv.setText(titleText); //set appearance of tab tv.setBackgroundResource(tabBackgroundDrawableId); tv.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); //Make sure all tabs have the same height tv.setMaxLines(2); tv.setMinLines(2); return tv; } 

Sin embargo, la barra de acción parece agregar la vista de pestañas a una vista principal que añade el relleno para cada una de las que necesita eliminar. Hice esto en el oncreate después del primer bloque de código así:

  View view = (View) tv1.getParent(); LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams)view.getLayoutParams(); view.setPadding(0, 0, 0, 0); view.setLayoutParams(lp); 

Usted puede encontrar una forma más graciosa / directa de hacer esto, pero como punto de partida que pensé que valía la pena publicar.

Espero que esto ayude.

ADICIONAL:

También puede valer la pena señalar que si tiene un diseño más complicado para su pestaña puede inflar un archivo xml de diseño en el método createTab en su lugar. Por ejemplo, utilizando el siguiente xml (mytab.xml):

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tabIcon"/> <TextView style="@style/MyDefaultTabTextAppearance" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/tabIcon" android:minLines="2" android:maxLines="2" android:id="@+id/tabText"/> </RelativeLayout> 

createTab se convierte en:

  private RelativeLayout createTab(String titleText, int tabBackgroundDrawableId) { RelativeLayout rl = (RelativeLayout)this.getLayoutInflater().inflate(R.layout.mytab, null, false); //set appearance of tab rl.setBackgroundResource(tabBackgroundDrawableId); TextView tv = (TextView)rl.findViewById(R.id.tabText); //set caption tv.setText(titleText); ImageView iv = (ImageView)rl.findViewById(R.id.tabIcon); iv.setImageResource(R.drawable.ic_launcher);//or supply unique drawable to method? return rl; } 
  • Ficha que no toma el ancho completo en el dispositivo Tablet
  • Barra de Acción de Android Icono de Sherlock para cada pestaña de recursos
  • Java.lang.OutOfMemoryError en Android 4.0 (API 14)
  • Android: cambia las pestañas de una actividad dentro de una pestaña
  • Barra de acciones de Android: pestañas personalizadas y desbordamiento
  • PagerTabStrip: cambia el ancho de la pestaña
  • Altura de las lengüetas de ActionBar
  • Android: GestureDetector no funciona (gestureDetector.onTouchEvent (evento) siempre es falso) con Tabs (TabActivity, Tabwidget)
  • Cómo hacer scrollable tab en Android?
  • Obtener una URL de pestaña desde la acción de la página (WebExtensions, Android)
  • Android manifest.xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.