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?
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?
Respuestas:
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);
}
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>
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));
}
}
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")));
}
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
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.
Eche un vistazo platforms/android-2.1/data/res/layout/screen.xml
al 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);
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/
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>
)
Las cosas parecen haber mejorado / facilitado 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>
Vea aquí para referencia:
https://developer.android.com/training/material/theme.html#ColorPalette
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));