2012-09-05 15 views
6

Voglio cambiare il colore del titolo blu e blu che compare in AlertDialog (tema Holo), sono stato in grado di cambiare il colore del titolo esaminando android styles.xml e themes.xml ma non riesco a trovare alcuna proprietà o stile che posso usare/modificare per cambiare il colore del mio XML.come modificare la linea blu in AlertDialog (tema Holo)

seguito è lo stile che sto usando per cambiare il colore del titolo

<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> 

risposta

4

EDIT: ho sbagliato nella mia risposta originale.

Sfortunatamente gli stili utilizzati per le finestre di dialogo sono interni e non possono essere utilizzati nello stesso modo di alcuni degli altri elementi holo facili da manipolare. I have created an open source project for dealing with this in very simple situations (spero di estenderlo in fondo alla strada e renderlo più .. legit). Ecco un link ad una nuova risposta che risolve questo più in profondità: How can I change the color of AlertDialog title and the color of the line under it


Ai posteri, ecco la mia ingenua risposta antiche:

sguardo al answer posted here. Per il tuo obiettivo specifico, vorrai ignorare lo stile dialogTitleDecorLayout (penso!) in contrasto con lo stile listSeparatorTextViewStyle.

Se sei curioso di sapere dove è impostato in origine, puoi cercare il file themes.xml nella cartella sdk di Android sul tuo computer e cercare l'attributo dialogTitleDecorLayout. Questo dovrebbe portarti a un file di layout dialog_title_holo che dovrebbe essere anche sul tuo computer. Ci si dovrebbe trovare il seguente codice all'interno del layout:

<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> 

Il codice di nota è il riferimento @android:drawable/divider_strong_holo. Questo file esiste anche sul tuo computer e dovrebbe essere un 9patch blu. Dovrai creare un 9patch simile di un colore diverso. In bocca al lupo! Anche se questo non è del tutto l'attributo giusto penso di vedere ciò che potrebbe essere necessario fare qui ...

+1

Questa soluzione ha funzionato per te? – Gopinath

+0

Non sapevo se la tua risposta risolvesse questo http://stackoverflow.com/questions/14439538/how-can-i-change-the-color-of-alertdialog-title-and-the-color-of-the -line-under –

+0

@forsubhi Penso che risolva questo problema, ma mi piacerebbe testarlo da solo prima di pubblicare una risposta solo per renderlo sicuro al 100%. (a meno che tu non ci abbia già provato? In tal caso sarei felice di postare la mia risposta) –

1
Ci

è una libreria che fa esattamente questo per tutte le finestre di dialogo:

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

+1

Ciao, grazie per il puntatore. In realtà, abbiamo provato a utilizzare questa libreria nel nostro progetto, ma l'abbiamo abbandonata di nuovo.Almeno al momento non è riuscito a sostituire l'API nativa e non poteva accogliere tutti i tipi di finestre di dialogo che avevamo già creato. – Chris

4

dopo alcuni ritocchi, mi è venuta in mente un modo per ri-brand finestra nel momento in cui viene mostrato:

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; 
} 

nota, che questa soluzione può rompere in qualsiasi momento il layout del sistema di base per i cambiamenti di dialogo. Tuttavia, è la finestra di dialogo del sistema originale con tutti i vantaggi di tale soluzione.

+0

È un hack, ma un hack funzionale. Non sei sicuro del tipo di impatto sulle prestazioni che questo aggiunge a un'app? Andando a testarlo e vedere come funziona nel lungo periodo. Grazie per lo sforzo! – Kyle

Problemi correlati