android - studio - Color del texto de la barra de acción
support action bar text color (19)
¿Cómo puedo cambiar el color del texto de la barra de acción? He heredado el tema Holo Light, puedo cambiar el fondo de la barra de acción pero no averiguo cuál es el atributo que se debe modificar para cambiar el color del 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 la barra de acción. ¿Alguna idea de cómo cambiar el color de esos menús desplegables / Lista?
Agrégalo 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 del texto de la barra de acción, nunca funcionó cuando era parte de Widget.Styled.ActionBar
, así que tuve que agregarlo a la raíz. Otros 2 atributos cambian título y subtítulo de una barra de acción.
Configurar 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 del texto primario en su estilo.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>
El ID de la barra de acción no está disponible directamente, por lo que debe hacer un poco de piratería 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);
}
}
Encontré una forma que funciona bien con cualquier ActionBar
de ActionBar
( Sherlock , Compat y Native ):
Simplemente use html para establecer el título y especifique el color del texto. Por ejemplo, para establecer el color del texto de la barra de acción 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, vea que Android Html.fromHtml (String) no funciona para el texto <font color = ''#''> </font> .
Además, si desea usar un recurso de color, este código se puede usar para obtener la cadena HEX correcta, y eliminar el alfa si es necesario (la etiqueta de fuente no es compatible con alfa):
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))));
Encontró la manera de hacerlo bien sin crear su propio diseño en API> = 21.
Solo coloreará los textos y controlará los elementos dibujables dentro de la barra de acción.
Espero que sea de utilidad 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>
Es un tema antiguo, pero para futuros lectores, el uso de la barra de herramientas hace que todo sea 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 usé después de revisar 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>
Cambia los colores requeridos para que funcione.
Esta funcion 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);
}
Luego, para usarlo, simplemente aliméntelo con 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);
Esta no es la solución recomendada ya que voy a ir a las aplicaciones Android, pero como mi aplicación requiere cambiar el tema dinámicamente en condiciones xml no es posible aquí, así que necesito hacer esto. Pero esta solución está funcionando muy bien.
Solución:--
/**
*
* @author Kailash Dabhi
* @email [email protected]
*
*/
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();
}
}
Intenta agregar esto en tu Actividad en 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 el 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 del 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 para otra cosa, puede especificar su propio color en colors.xml o incluso usar un color incorporado de Android usando 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 los elementos de menú que se muestran en la barra de acción.
Lo he hecho con un simple código de una línea
actionBar.setTitle(Html.fromHtml("<font color=''#ff0000''>ActionBartitle </font>"));
Muchas respuestas están en desuso, así que actualizaré el hilo y mostraré cómo cambiar el color del texto y el color de fondo en la barra de herramientas (barra de herramientas) y en el menú emergente de la barra de acción.
El enfoque más reciente en Android (a partir de mayo de 2018) para trabajar con la barra de acción (barra de herramientas) es usar el tema con NoActionBar y usar la barra de herramientas en su lugar.
así que aquí está lo que necesitas:
En la actividad (que extiende AppCompatActivity) declara la barra de herramientas:
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(myToolbar);
Añadir barra de herramientas en el diseño de la actividad xml. Aquí configuraremos nuestro personalizado (temas sobrescritos), nota
android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
yapp:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
, harán el truco.<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppTheme.ActionBar" app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu" app:layout_constraintTop_toTopOf="parent" />
En su styles.xml tendrá que sobrescribir esos dos estilos para establecer colores personalizados:
<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="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item> <item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item> </style> <style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:textColorPrimary">@color/action_bar_text_color</item> <item name="android:background">@color/action_bar_bg_color</item> </style> <style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:background">@color/popup_bg_color</item> <item name="android:textColorPrimary">@color/popup_text_color</item> </style>
Eso es todo gente
PD: si me preguntas, diría: SÍ, todo este tema del tema es un infierno de lío.
Ok, he encontrado una mejor manera. Ahora solo puedo cambiar el color del título. También puedes retocar 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>
Para Android 5 (lollipop) tendrá que usar android: actionBarPopupTheme para configurar el color de texto para el menú de desbordamiento.
Pruebe muchos métodos, en la versión baja de la API, un método factible es <item name="actionMenuTextColor">@color/your_color</item>
y no use el espacio de nombres de Android, espero poder 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>
Si también desea aplicar un estilo a los subtítulos, simplemente agréguelo a su estilo personalizado.
<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
Las personas que buscan obtener el mismo resultado para la biblioteca AppCompat
, 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>
Tenía el mismo problema que tú, es un tema Holo.Light pero quería diseñar el color de la barra de acción, así que también tenía que cambiar el color del texto y también el título y los menús. Así que al final fui a git hub y miré el código fuente hasta que encontré 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>
¡Ahora todo lo que tiene que hacer es configurar lo que desee @color/actionBarText
y @drawable/actionbarbground
que desee!
Una buena solución es utilizar un SpannableStringBuilder y establecer el color de esa manera. Incluso puedes usar diferentes colores en diferentes partes de la cadena, agregar imágenes, etc.
Probado con la nueva biblioteca de soporte.
Ver Android: ¿Colorear parte de una cadena usando TextView.setText ()?