Cómo cambiar la línea azul en el AlertDialog (tema Holo)
Quiero cambiar el color del título azul y la línea azul que viene en AlertDialog (tema de Holo), pude cambiar el color del título mirando en android styles.xml y themes.xml pero no puedo encontrar ninguna propiedad o estilo Que puedo utilizar / cambiar para cambiar el color de mi XML.
El siguiente es el estilo que estoy usando para cambiar el color del título
- NullPointerException al mostrar un ViewPager una segunda vez
- Utilizar la aplicación Wicket existente para la aplicación Android
- Java.lang.IllegalStateException: La aplicación PagerAdapter cambió el contenido del adaptador sin llamar a PagerAdapter # notifyDataSetChanged android
- Manejo de cambios de orientación condicionalmente
- Obtener el nombre de contacto dado un número de teléfono en Android
<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>
- Cómo iniciar un IntentService de un WakefulBroadcastReceiver
- ¿Cómo salir de una aplicación de Android con código?
- Personajes extraños en html webview
- Android Studio - Java JVM
- Biblioteca de Android AAR dependiendo de otra biblioteca
- Colisión perfecta de píxeles con Config.ALPHA_8
- Usando secciones con fragmentos, NullPointerException
- ¿Cuál es el tiempo de espera predeterminado de java.net.Socket en android?
EDIT: Estaba equivocado en mi respuesta original.
Desafortunadamente, los estilos utilizados para los diálogos son internos y no pueden usarse de la misma manera que algunos de los otros elementos holo fáciles de manipular. He creado un proyecto de código abierto para tratar con esto en situaciones muy simples (espero extenderlo por el camino y hacerlo más .. legit). Aquí está un enlace a una nueva respuesta que aborda esto más en profundidad: ¿Cómo puedo cambiar el color del título de AlertDialog y el color de la línea debajo
Para la posteridad, aquí está mi vieja y ingenua respuesta:
Mira la respuesta publicada aquí . Para su objetivo particular, usted querrá estar sobreescribiendo el estilo de dialogTitleDecorLayout
( creo! ) En comparación con el estilo listSeparatorTextViewStyle
.
Si tiene curiosidad de saber dónde está configurado originalmente, puede explorar el archivo themes.xml en la carpeta android sdk de su computadora y buscar el atributo dialogTitleDecorLayout
. Esto debería conducir a un archivo de diseño dialog_title_holo
que también debería estar en su computadora. Allí usted debe encontrar el código siguiente 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 la nota es el @android:drawable/divider_strong_holo
referencia. Este archivo también existe en su computadora y debe ser un 9patch azul. Usted necesitará crear un 9patch similar de un diverso color. ¡Buena suerte! Incluso si esto no es exactamente el atributo correcto creo que ves lo que necesitas hacer aquí …
Después de algunos ajustes, he llegado con una manera de volver a marcar el diálogo en 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 el diseño del sistema subyacente para los cambios de diálogo. Sin embargo, es el diálogo del sistema original con todas las ventajas de tal solución.
Hay una biblioteca que hace exactamente eso para todos sus diálogos: