Establecer el color de fondo del título


106

En mi aplicación de Android, quiero que la barra de título estándar / básica cambie de color.

Para cambiar el color del texto que tiene setTitleColor(int color), ¿hay alguna forma de cambiar el color de fondo de la barra?


Creo que no es necesario usar un título personalizado para cambiar el color de fondo a la barra de título. revisa esta publicación
Deepthi Jabili

Miraría la respuesta de Edwinfad en lugar de la anticuada aceptada.
zgc7009

Respuestas:


186

Este hilo lo ayudará a comenzar a construir su propia barra de título en un archivo xml y usarlo en sus actividades

Editar

Aquí hay un breve resumen del contenido del enlace anterior: esto es solo para establecer el color del texto y el fondo de la barra de título, sin cambio de tamaño, sin botones, solo la muestra más simple

res / layout / mytitle.xml : esta es la vista que representará la barra de título

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTitle"
  android:text="This is my new title"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@color/titletextcolor"
   />

res / values ​​/ themes.xml : queremos mantener el tema de Android predeterminado y solo necesitamos cambiar el color de fondo del fondo del título. Así que creamos un tema que hereda el tema predeterminado y configuramos el estilo de fondo a nuestro propio estilo.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="android:Theme"> 
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

res / values ​​/ styles.xml : aquí es donde configuramos el tema para usar el color que queremos para el fondo del título

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="android:background">@color/titlebackgroundcolor</item>                   
    </style>
</resources>

res / values ​​/ colors.xml - Establezca aquí el color que desee

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

En AndroidMANIFEST.xml , establezca el atributo del tema en la aplicación (para toda la aplicación) o en las etiquetas de actividad (solo esta actividad)

<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...

Desde la actividad (llamada CustomTitleBar):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);

}

9
La mayoría de las veces, solo proporcionar un enlace es una respuesta muy barata y en stackoverflow no le gusta mucho la respuesta. Trate de obtener algunos de los conocimientos del enlace a esta página. Obtendrá más y más conocimiento en la comunidad, e incluso si el enlace no funciona, su respuesta aún proporciona algunos términos de búsqueda que pueden dirigir a otras personas en la dirección.
Janusz

7
@Janusz: Tiene toda la razón, así que actualicé la publicación con la muestra más simple para que la gente pueda comenzar en lugar de leer el hilo en el enlace anterior
ccheneson

3
Después de sobrescribir el estilo de Android, no necesita agregar el título personalizado del código si solo desea cambiar el color de fondo
Janusz

1
Como dijo Janusz, no necesita tener una Vista personalizada si solo desea anular el estilo utilizado (no agregar nuevas Vistas). En ese caso, tampoco es necesario que solicite un FEATURE_CUSTOM_STYLE. Finalmente, puede definir el estilo a nivel de la aplicación para aplicarlo a todas sus actividades a la vez. Gracias por el código, por cierto.
Eric Kok

2
esto no cambia el color de fondo del título, solo se cambia el color del texto. incluso si estoy cambiando el color de la barra de título <color name = "titlebackgroundcolor"> # 3232CD </color>. ¿Estoy haciendo algo mal?
Shaista Naaz

18

Gracias por esta explicación clara, sin embargo, me gustaría agregar un poco más a su respuesta haciendo una pregunta vinculada (realmente no quiero hacer una nueva publicación ya que esta es el sótano de mi pregunta).

Declaro mi barra de título en una Superclase de la cual, todas mis otras actividades son para niños, para tener que cambiar el color de la barra solo una vez. También me gustaría agregar un ícono y cambiar el texto en la barra. Hice algunas pruebas y logré cambiar uno u otro, pero no ambos al mismo tiempo (usando setFeatureDrawable y setTitle). La solución ideal sería, por supuesto, seguir la explicación en el hilo dado en el enlace, pero como estoy declarando en una superclase, tengo un problema debido al diseño en setContentView y R.id.myCustomBar, porque si yo recuerda que puedo llamar a setContentView solo una vez ...

EDITAR Encontré mi respuesta:

Para aquellos a quienes, como a mí, les gusta trabajar con superclases porque es excelente para tener un menú disponible en todas partes en una aplicación, funciona igual aquí.

Solo agregue esto a su superclase:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.customtitlebar);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
    customTitleText = (TextView) findViewById(R.id.customtitlebar);

(tienes que declarar la vista de texto como variable de clase protegida)

Y luego, el poder de esto es que, en todas partes de su aplicación (si, por ejemplo, todas sus actividades son secundarias de esta clase), solo tiene que llamar

customTitleText.setText("Whatever you want in title");

y se editará su barra de título.

El XML asociado en mi caso es (R.layout.customtitlebar):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
    android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
    android:layout_width="wrap_content" android:layout_height="fill_parent"
    android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
    android:background="@color/background" android:padding="3px" />
</LinearLayout>

¿Por qué me votan en contra? ¿Qué pasa con mi código? funciona perfectamente para mí ...
Sephy

1
Siendo un principiante, siento que arriba hay un buen código con una buena explicación. +1 para ti !!!
RK

@Sephy, ¿tengo que hacer una clase diferente para la barra de título y luego solo yo puedo usarla?
Vikas Gupta


11

Hay otra forma de cambiar el color de fondo, sin embargo, es un truco y podría fallar en futuras versiones de Android si se cambia la jerarquía de vista de la ventana y su título. Sin embargo, el código no se bloqueará, solo se perderá la configuración del color deseado, en tal caso.

En su Actividad, como onCreate, haga:

View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
  ViewParent parent = titleView.getParent();
  if (parent != null && (parent instanceof View)) {
    View parentView = (View)parent;
    parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
  }
}

muy bueno y simple también. Pero quiero preguntarte una cosa que este lo está haciendo desde el código, por lo que se retrasa un poco. Para evitar tal situación, tendré que escribir todo en el xml y nada en el código. Entonces, ¿puedes guiarme en eso?
Shaista Naaz

Creo que tiene la solución en la respuesta seleccionada arriba. Debe definir un tema personalizado para la actividad y configurar su android: windowTitleBackgroundStyle en el color que desee.
mikeplate

7

Este código ayuda a cambiar el fondo de la barra de título mediante programación en Android. Cambie el color a cualquier color que desee.

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}

Esto se introdujo en API 11 (3.0 Honeycomb) que ciertamente está lo suficientemente desactualizado en este punto como para considerar esta opción válida.
zgc7009

Pero todavía lo estoy usando en todas mis aplicaciones recientes con targetSdkVersion = "23" sin obtener ninguna información obsoleta.
Edwinfad

Absolutamente, está 100% bien usar esto. No ha sido reemplazado por nada, pero debe evitarse usarlo antes de API 11 (lo que muy pocas personas harán), al menos sin una biblioteca de compatibilidad.
zgc7009

Célebre. @ zgc7009
Edwinfad

1
Use getSupportActionBar () en su lugar si está usando AppCompatActivity
mondlos

6
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

en el código anterior puede probar puede usar el título en lugar de la barra de título, esto afectará a toda la actividad en su aplicación


2

Supongo que no. Puede crear una actividad sin título y crear su propia barra de título en el diseño de la actividad.

Marque esto , Línea 63 y más abajo:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

establece vista personalizada en lugar de vista de título predeterminada.


¿Cómo / dónde puedo crear una barra de título propia / personalizada?
Thizzer

2

Eche un vistazo platforms/android-2.1/data/res/layout/screen.xmlal SDK. Parece definir un título allí. Puede examinar con frecuencia diseños como este y pedir prestado el style="?android:attr/windowTitleStyle" estilos que luego puede usar y anular en sus propios TextViews.

Es posible que incluso pueda seleccionar el título para modificarlo directamente haciendo:

TextView title = (TextView)findViewById(android.R.id.title);

1
Buenas respuestas anteriores, pero ¿es posible simplemente colorear la barra de título sin tener que crear un diseño personalizado para ella?
Eno

2

Prueba con el siguiente código

View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

También use este enlace, es muy útil: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/


¿Esto todavía funciona con Lollipop? titleView parece devolver nulo para mí.
WORMSS

1

Existe una alternativa más fácil para cambiar el color de la barra de título, utilizando la biblioteca de soporte de appcompat v7 proporcionada por Google.

Vea este enlace sobre cómo configurar esta biblioteca de soporte: https://developer.android.com/tools/support-library/setup.html

Una vez que haya hecho eso, es suficiente agregar las siguientes líneas a su archivo res / values ​​/ styles.xml:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>

<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/titlebackgroundcolor</item>
</style>

(asumiendo que "titlebackgroundcolor" está definido en su res / values ​​/ colors.xml, por ejemplo:

<color name="titlebackgroundcolor">#0000AA</color>

)


Cuando se orienta solo a Android 5, existe una alternativa aún más simple, consulte [ developer.android.com/training/material/… .
stefan.m


1

He hecho esto cambiando los valores de color de estilo en "res" -> "valores" -> "colors.xml" ingrese la descripción de la imagen aquí

Esto cambiará los colores de todo el proyecto, lo cual me parece bien.

ingrese la descripción de la imagen aquí


0

puedes usarlo.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));

0

Pegue este código después de setContentView o en onCreate

si tiene un código de color, utilice este;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));

si desea un código específico de la biblioteca de colores, use esto;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.