programacion - cambiar color barra de titulo android
Establecer el color de fondo del título (10)
Echa un vistazo a las platforms/android-2.1/data/res/layout/screen.xml
del SDK. Parece definir un título allí. Con frecuencia puede examinar diseños como este y tomar prestados los style="?android:attr/windowTitleStyle"
que luego puede usar y anular en sus propios TextViews.
Incluso puede seleccionar el título para ajustes directos haciendo:
TextView title = (TextView)findViewById(android.R.id.title);
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 ha setTitleColor(int color)
, ¿hay alguna manera de cambiar el color de fondo de la barra?
Este thread ayudará a comenzar a construir su propia barra de título en un archivo xml y a 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 cambiar el 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 tenemos que cambiar el color de fondo del fondo del título. Así que creamos un tema que hereda el tema predeterminado y establece el estilo de fondo para 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 establecemos 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 desea
<?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 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" ...
De 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);
}
Este código ayuda a cambiar el fondo de la barra de título programáticamente 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")));
}
Existe una alternativa más fácil para cambiar el color de la barra de título, utilizando la biblioteca de soporte de v7 appcompat 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>
(suponiendo que "titlebackgroundcolor" está definido en res / values / colors.xml, por ejemplo:
<color name="titlebackgroundcolor">#0000AA</color>
)
Gracias por esta explicación clara, sin embargo, me gustaría añadir un poco más a su respuesta haciendo una pregunta vinculada (realmente no quiero hacer una nueva publicación ya que esta es la base de mi pregunta).
Estoy declarando mi barra de título en una Superclase de la cual, todas mis otras actividades son niños, para tener que cambiar el color de la barra solo una vez. También me gustaría agregar un icono y cambiar el texto en la barra. Hice algunas pruebas y logré cambiar una u otra, pero no ambas al mismo tiempo (usando setFeatureDrawable y setTitle). La solución ideal sería, por supuesto, seguir la explicación en el hilo del enlace, pero como 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 que, como a mí, les gusta trabajar con superclases porque es genial para tener un menú disponible en todas partes en una aplicación, funciona igual aquí.
Solo 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 luego, el poder de esto es que, en todas partes de su aplicación (si, por ejemplo, todas sus actividades son hijos de esta clase), solo tiene 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>
Hay otra forma de cambiar el color de fondo, sin embargo, es un truco y podría fallar en versiones futuras 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á, simplemente omita configurar el color deseado, en tal caso.
En tu actividad, como onCreate, 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));
}
}
Las cosas parecen haber mejorado / ser más fáciles desde Android 5.0 (API nivel 21).
Creo que lo que estás buscando es algo como esto:
<style name="AppTheme" parent="AppBaseTheme">
<!-- Top-top notification/status bar color: -->
<!--<item name="colorPrimaryDark">#000000</item>-->
<!-- App bar color: -->
<item name="colorPrimary">#0000FF</item>
</style>
Ver aquí para referencia:
https://developer.android.com/training/material/theme.html#ColorPalette
Pruebe 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 utilizo este enlace es muy útil: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
Supongo que no. Puede crear actividad sin título y crear su propia barra de título en el diseño de la actividad.
Verifique this , Línea 63 y abajo:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
establece la vista personalizada en lugar de la vista de título predeterminada.
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 que puede usar el título en lugar de la barra de título, esto afectará a toda la actividad en su aplicación