2012-09-05 33 views
6

Quiero cambiar el color del título azul y la línea azul que viene en AlertDialog (tema Holo), pude cambiar el color del título al mirar android styles.xml y themes.xml pero no puedo encontrar ninguna propiedad o estilo que pueda usar/cambiar para cambiar el color de mi XML.cómo cambiar la línea azul en el AlertDialog (tema Holo)

siguiente es el estilo que estoy usando para cambiar el color del título

<style name="myAlertDialog" parent="android:Theme.Holo.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowTitleStyle">@style/myAlertDialogTitleStyle</item> 
</style> 

<style name="myAlertDialogTitleStyle"> 
    <item name="android:maxLines">1</item> 
    <item name="android:scrollHorizontally">true</item> 
    <item name="android:textAppearance">@style/myAlertDialogTitleStyleTextAppearance</item> 
</style> 

<style name="myAlertDialogTitleStyleTextAppearance"> 
    <item name="android:textSize">22sp</item> 
    <item name="android:textColor">#ffff8800</item> 
</style> 

Respuesta

4

EDIT: que estaba equivocado en mi respuesta original.

Desafortunadamente los estilos utilizados para los cuadros de diálogo son internos y no se pueden usar de la misma manera que algunos de los otros elementos de holo fáciles de manipular. I have created an open source project for dealing with this in very simple situations (espero extenderlo por la carretera y hacerlo más ... legítimo). Aquí hay un enlace a una nueva respuesta que se ocupa de esto más en profundidad: How can I change the color of AlertDialog title and the color of the line under it


Para la posteridad, aquí está mi respuesta ingenua antigua:

Mira el answer posted here. Para su objetivo particular, querrá anular el estilo dialogTitleDecorLayout (¡Creo!) en comparación con el estilo listSeparatorTextViewStyle.

Si tiene curiosidad por saber dónde está configurado originalmente, puede hojear el archivo themes.xml en su carpeta sdk de Android en su computadora y buscar el atributo dialogTitleDecorLayout. Esto debería llevarlo a un archivo de diseño dialog_title_holo que también debería estar en su computadora. No se debe encontrar el siguiente código dentro del diseño:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:fitsSystemWindows="true"> 
    <TextView android:id="@android:id/title" style="?android:attr/windowTitleStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="60dip" 
    android:paddingLeft="32dip" 
    android:paddingRight="32dip" 
    android:gravity="center_vertical|left" /> 
    <ImageView android:id="@+id/titleDivider" 
     android:layout_width="match_parent" 
     android:layout_height="4dip" 
     android:scaleType="fitXY" 
     android:gravity="fill_horizontal" 
     android:paddingLeft="16dip" 
     android:paddingRight="16dip" 
     android:src="@android:drawable/divider_strong_holo" /> 
    <FrameLayout 
    android:layout_width="match_parent" android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:orientation="vertical" 
    android:foreground="?android:attr/windowContentOverlay"> 
    <FrameLayout android:id="@android:id/content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
    </FrameLayout> 
</LinearLayout> 

El código de mención es la referencia @android:drawable/divider_strong_holo. Este archivo también existe en su computadora y debe ser un 9patch azul. Deberá crear un parche 9 similar de un color diferente. ¡Buena suerte! Incluso si esto no es exactamente el atributo derecha Creo que vea lo que es posible que tenga que hacer aquí ...

+1

¿Te resultó útil esta solución? – Gopinath

+0

No sabía si su respuesta resolvería esto http://stackoverflow.com/questions/14439538/how-can-i-change-the-color-of-alertdialog-title-and-the-color-of-the -line-under –

+0

@forsubhi Creo que resuelve ese problema, pero me gustaría probarlo por mi cuenta antes de publicar una respuesta solo para estar 100% seguro. (a menos que ya lo haya intentado? En ese caso, me gustaría publicar mi respuesta) –

1

hay una biblioteca que hace exactamente eso para todos sus diálogos:

https://github.com/inmite/android-styled-dialogs

+1

Hola, gracias por el puntero. En realidad, tratamos de usar esta biblioteca en nuestro proyecto, pero la dejamos caer otra vez.Al menos en el momento en que se quedó corto en la sustitución de la API nativa, y no podía acomodar todo tipo de diálogos que ya habíamos construido. – Chris

4

después de algunos retoques, yo he llegado con una forma de volver a la marca del cuadro de diálogo el momento en que se muestra:

private AlertDialog showWithThemeColors() { 
    Log.d(TAG, "showWithThemeColors()"); 
    AlertDialog dialog = this.builder.show(); 
    try { 
     ViewGroup decorView = (ViewGroup) dialog.getWindow().getDecorView(); 
     FrameLayout windowContentView = (FrameLayout) decorView.getChildAt(0); 
     FrameLayout contentView = (FrameLayout) windowContentView.getChildAt(0); 
     LinearLayout parentPanel = (LinearLayout) contentView.getChildAt(0); 
     LinearLayout topPanel = (LinearLayout) parentPanel.getChildAt(0); 
     View titleDivider = topPanel.getChildAt(2); 
     LinearLayout titleTemplate = (LinearLayout) topPanel.getChildAt(1); 
     TextView alertTitle = (TextView) titleTemplate.getChildAt(1); 

     int textColor = this.context.getResources().getColor(R.color.customer_text_on_primary); 
     alertTitle.setTextColor(textColor); 

     int primaryColor = this.context.getResources().getColor(R.color.customer_primary); 
     titleDivider.setBackgroundColor(primaryColor); 
    } catch (Exception e) { 
     Log.e(TAG, "showWithThemeColors() - Could not re-brand dialog with theme colors.", e); 
    } 

    return dialog; 
} 

Tenga en cuenta, que esta solución puede romper en cualquier momento la disposición del sistema subyacente de los cambios de diálogo. Sin embargo, es el diálogo original del sistema con todas las ventajas de dicha solución.

+0

Es un truco, pero un truco funcional. ¿No está seguro de qué tipo de impacto en el rendimiento agrega a una aplicación? Voy a probarlo y ver cómo funciona a largo plazo. ¡Gracias por el esfuerzo! – Kyle

Cuestiones relacionadas