Establecer color de fondo del título

Resuelto Thizzer asked hace 54 años • 13 respuestas

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 tienes setTitleColor(int color), ¿hay alguna manera de cambiar el color de fondo de la barra?

Thizzer avatar Jan 01 '70 08:01 Thizzer
Aceptado

Este hilo le ayudará a empezar a crear su propia barra de título en un archivo xml y a utilizarla en sus actividades.

Editar

Aquí hay un breve resumen del contenido del enlace anterior. Esto es solo para configurar el color del texto y el fondo de la barra de título. Sin cambios 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 predeterminado de Android y solo necesitamos cambiar el color de fondo del título. Entonces creamos un tema que hereda el tema predeterminado y configuramos el estilo de fondo según 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 que use 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 - Establece aquí el color que deseas

<?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 de tema en las etiquetas de la aplicación (para toda la aplicación) o de la 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);

}
ccheneson avatar Feb 18 '2010 01:02 ccheneson

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 publicación nueva ya que esta es la base de mi pregunta).

Estoy declarando mi barra de título en una Superclase de la cual, todas mis demás actividades son secundarias, 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 que figura en el enlace, pero como lo declaro en una superclase, tengo un problema debido al diseño en setContentView y R.id.myCustomBar, porque si Recuerda bien, 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, aquí funciona igual.

Simplemente agrega esto a tu 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);

(debe declarar la vista de texto como variable de clase protegida)

Y el poder de esto es que, en todas partes de tu aplicación (si, por ejemplo, todas tus actividades son hijas de esta clase), solo tienes que llamar

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

y su barra de título será editada.

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>
Sephy avatar Apr 27 '2010 13:04 Sephy

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 vistas de la ventana y su título. Sin embargo, el código no fallará, simplemente no establecerá el color deseado, en tal caso.

En tu Actividad, como enCreate, haz:

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));
  }
}
mikeplate avatar Dec 02 '2010 19:12 mikeplate

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

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

}
Edwinfad avatar Nov 21 '2016 20:11 Edwinfad