Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Color de texto de ActionBar

¿Cómo puedo cambiar el color de texto de la ActionBar? He heredado el tema de la luz de Holo, puedo cambiar el fondo de la barra de acción pero no descubro cuál es el atributo a modificar para cambiar el color de texto.


Ok, puedo cambiar el color del texto con el atributo android: textColorPrimary pero también cambia el color del texto del menú desplegable que aparece cuando ocurre un desbordamiento en los botones de ActionBar. Cualquier idea de cómo cambiar el color de los menú desplegable / lista?

18 Solutions collect form web for “Color de texto de ActionBar”

Ok, he encontrado una mejor manera. Ahora sólo puedo cambiar el color del título. También puede ajustar el subtítulo.

Aquí está mi styles.xml:

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item> </style> <style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> </style> <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> <item name="android:textColor">@color/red</item> </style> </resources> 

Estaba teniendo el mismo problema que tú, es un tema de Holo.Light, pero quería el estilo del color ActionBar, así que necesitaba cambiar el color del texto, así como también el título y los menús. Así que al final me fui a git hub y miró el código fuente hasta que encuentro el maldito estilo correcto:

 <?xml version="1.0" encoding="utf-8"?> <!-- For honeycomb and up --> <resources> <style name="myTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/myTheme.ActionBar</item> <item name="android:actionMenuTextColor">@color/actionBarText</item> </style> <style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">@drawable/actionbarbground</item> <item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item> </style> <style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance"> <item name="android:textColor">@color/actionBarText</item> </style> </resources> 

Así que ahora todo lo que tienes que hacer es establecer lo que @color/actionBarText y @drawable/actionbarbground que desea!

He encontrado una manera que funciona bien con cualquier sabor de ActionBar ( Sherlock , Compat y Native ):

Simplemente utilice html para definir el título y especifique el color del texto. Por ejemplo, para establecer el color de texto de ActionBar en rojo, simplemente haga esto:

 getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>")); 

También puede usar el código hexadecimal rojo #FF0000 lugar de la palabra red . Si tiene problemas con esto, consulte Android Html.fromHtml (String) no funciona para <font color = '#'> text </ font> .


Además, si desea utilizar un recurso de color, este código se puede utilizar para obtener la cadena HEX correcta y eliminar el alfabeto si es necesario (la etiqueta de fuente no admite alpha):

 int orange = getResources().getColor(R.color.orange); String htmlColor = String.format(Locale.US, "#%06X", (0xFFFFFF & Color.argb(0, Color.red(orange), Color.green(orange), Color.blue(orange)))); 

El ID de ActionBar no está disponible directamente, así que tienes que hacer un poco de hacking aquí.

 int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android"); if (actionBarTitleId > 0) { TextView title = (TextView) findViewById(actionBarTitleId); if (title != null) { title.setTextColor(Color.RED); } } 

He hecho con el código de una sola línea simple

 actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>")); 

Añadir a la raíz de la barra de acción. Tuve este problema.

 <style name="ActionBar" parent="@style/Theme.AppCompat.Light"> <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item> <item name="actionMenuTextColor">@color/stdDarkBlueText</item> </style> <style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar"> <item name="titleTextStyle">@style/ActionBarTitleText</item> <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item> </style> <style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">@color/stdDarkBlueText</item> <item name="android:textSize">12sp</item> </style> <style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle"> <item name="android:textColor">@color/stdDarkBlueText</item> <item name="android:textSize">12sp</item> </style> 

ActionMenuTextColor – cambia el color del texto de la barra de acción, nunca funcionó cuando formaba parte del Widget.Styled.ActionBar , así que tuve que añadirlo a la raíz. Otros 2 atributos cambian el título y el subtítulo de una barra de acción.

Establecer una cadena HTML en la barra de acción no funciona en el tema Material en SDK v21 +

Si desea cambiarlo, debe establecer el color de texto principal en su style.xml

 <resources> <!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Material.Light"> <!-- Customize your theme here. --> <item name="android:textColorPrimary">@color/actionbar-text-color</item> </style> </resources> 

Si usted quiere al estilo el subtítulo también entonces simplemente agrega esto en su estilo de encargo.

 <item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> 

Las personas que buscan obtener el mismo resultado para la biblioteca de AppCompat , entonces esto es lo que usé:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/MyActionBar</item> <item name="actionBarStyle">@style/MyActionBar</item> <!-- other activity and action bar styles here --> </style> <!-- style for the action bar backgrounds --> <style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:background">@drawable/actionbar_background</item> <item name="background">@drawable/actionbar_background</item> <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> <item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> <item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> </style> <style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">@color/color_title</item> </style> </resources> 

Su un viejo tema pero para los lectores futuros, si usted utiliza la barra de herramientas hace todo muy fácil:

 Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setTitle(R.string.app_name); toolbar.setTitleTextColor(getResources().getColor(R.color.someColor)); setSupportActionBar(toolbar); 

Esta es la solución que utilicé después de verificar todas las respuestas

 <!-- Base application theme. --> <style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorAccent">@color/Button_color</item> <item name="android:editTextStyle">@style/EditTextStyle</item> <item name="android:typeface">monospace</item> <item name="android:windowActionBar">true</item> <item name="colorPrimary">@color/Title_Bar_Color</item> <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item> <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item> </style> <style name="EditTextStyle" parent="Widget.AppCompat.EditText"/> <style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar"> <item name="titleTextStyle">@style/ActionBarTitleText</item> <item name="android:background">@color/Title_Bar_Color</item> <item name="background">@color/Title_Bar_Color</item> <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item> </style> <style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">@color/solid_white</item> <item name="android:textSize">12sp</item> </style> <style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle"> <item name="android:textColor">@color/solid_white</item> <item name="android:textSize">12sp</item> </style> 

Cambiar los colores requeridos funcionará

Encontrado la manera de hacerlo bien sin crear su propio diseño en API> = 21.

Sólo coloreará los textos y controlará los dibujos dentro de la barra de acción.

Espero que sea útil para alguien.

 <!--Material design primary colors--> <style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">@color/accent</item> <item name="android:navigationBarColor">@color/primary_dark</item> <item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item> </style> <!--Action bar--> <style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid"> <item name="android:textColorPrimary">@color/action_bar_text</item> <item name="colorControlNormal">@color/action_bar_text</item> </style> 

Esta función funciona bien

 private void setActionbarTextColor(ActionBar actBar, int color) { String title = actBar.getTitle().toString(); Spannable spannablerTitle = new SpannableString(title); spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); actBar.setTitle(spannablerTitle); } 

Entonces para usarlo sólo alimentar a su barra de acción y el nuevo color es decir

 ActionBar actionBar = getActionBar(); // Or getSupportActionBar() if using appCompat int red = Color.RED setActionbarTextColor(actionBar, red); 

Pruebe un montón de métodos, en la versión baja de la API, un método factible es <item name="actionMenuTextColor">@color/your_color</item> y no utilice el espacio de nombres de Android, la esperanza puede ayudarle

PD:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="actionMenuTextColor">@color/actionMenuTextColor</item> </style> 

Trate de añadir esto en la actividad onCreate. Funciona en casi todas las versiones de Android.

  actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>")); 

o

 getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>")); 

La forma más directa es hacerlo en styles.xml.

La plantilla de Google, styles.xml, genera actualmente lo siguiente:

 <style name="AppTheme" parent="Theme.AppCompat.Light"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> 

Si agrega una línea más antes de la etiqueta de cierre, como se muestra, cambiará el color de texto a lo que debería ser con una barra de acción oscura:

 <style name="AppTheme" parent="Theme.AppCompat.Light"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item> </style> 

Si desea personalizar el color a otra cosa, puede especificar su propio color en colors.xml o incluso utilizar un color incorporado de Android mediante el atributo android: textColorPrimary:

 <style name="AppTheme" parent="Theme.AppCompat.Light"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item> </style> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:textColorPrimary">@android:color/darker_gray</item> </style> 

Nota: Esto cambia el color del título y también los títulos de cualquier MenuItems que se muestren en ActionBar.

Una buena solución es usar SpannableStringBuilder y configurar el color de esa manera. Incluso puede utilizar diferentes colores en diferentes partes de la cadena, añadir imágenes, etc.

Probado con la nueva biblioteca de soporte.

Ver Android: ¿Colorear parte de una cadena usando TextView.setText ()?

Esta no es la solución recomendada, ya que voy en android apis aquí, pero como mi aplicación requiere para cambiar el tema dinmically en xml condiciones no es posible aquí, por lo que tengo que hacer esto. Pero esta solución está funcionando muy bien.

Solución:–

  /** * * @author Kailash Dabhi * @email kailash09dabhi@gmail.com * */ public static void setActionbarTextColor(Activity activity, int color) { Field mActionViewField; try { mActionViewField = activity.getActionBar().getClass() .getDeclaredField("mActionView"); mActionViewField.setAccessible(true); Object mActionViewObj = mActionViewField.get(activity .getActionBar()); Field mTitleViewField = mActionViewObj.getClass().getDeclaredField( "mTitleView"); mTitleViewField.setAccessible(true); Object mTitleViewObj = mTitleViewField.get(mActionViewObj); TextView mActionBarTitle = (TextView) mTitleViewObj; mActionBarTitle.setTextColor(color); // Log.i("field", mActionViewObj.getClass().getName()); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } } 

Para Android 5 (piruleta) tendrá que usar android: actionBarPopupTheme para establecer el textColor para el menú de desbordamiento.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.