2014-04-11 19 views

risposta

33

L'unico modo per cambiare il colore di divisione Dialog titolo è di sottoclassi Dialog e utilizzando Resources.getIdentifier per trovare il titolo di divisione View. Dopo tutto ciò che serve è una chiamata a View.setBackgroundColor. Poiché questo è l'unico modo per personalizzare il divisore del titolo, puoi anche andare avanti e utilizzare lo stesso metodo per personalizzare anche il colore del titolo.

Ma per quanto riguarda il motivo per cui non è possibile ottenere la risposta che hai collegato a lavorare per te, è difficile da dire. Non includi codice o qualsiasi cosa tu abbia provato, quindi è complicato individuare perché non stai ricevendo i risultati che desideri.

Ecco un esempio di cambiare il colore del titolo e il colore del titolo di divisione:

/** 
* A sublcass of {@link AlertDialog} used to customize the title and title 
* divider colors 
*/ 
public class CustomDialog extends AlertDialog { 

    /** 
    * Constructor for <code>CustomDialog</code> 
    * 
    * @param context The {@link Context} to use 
    */ 
    public CustomDialog(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final Resources res = getContext().getResources(); 
     final int yellow = res.getColor(android.R.color.holo_orange_light); 

     // Title 
     final int titleId = res.getIdentifier("alertTitle", "id", "android"); 
     final View title = findViewById(titleId); 
     if (title != null) { 
      ((TextView) title).setTextColor(yellow); 
     } 

     // Title divider 
     final int titleDividerId = res.getIdentifier("titleDivider", "id", "android"); 
     final View titleDivider = findViewById(titleDividerId); 
     if (titleDivider != null) { 
      titleDivider.setBackgroundColor(yellow); 
     } 
    } 

} 

Attuazione

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    final CustomDialog customDialog = new CustomDialog(this); 
    customDialog.setTitle("Title"); 
    customDialog.setMessage("Message"); 
    customDialog.show(); 
} 

Utilizzando un DialogFragment con AlertDialog.Builder

public class CustomDialogFragment extends DialogFragment { 

    /** 
    * Empty constructor as per the {@link Fragment} docs 
    */ 
    public CustomDialogFragment() { 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return new AlertDialog.Builder(getActivity()) 
       .setTitle("Title") 
       .setMessage("Message") 
       .create(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     final Resources res = getResources(); 
     final int yellow = res.getColor(android.R.color.holo_orange_light); 

     // Title 
     final int titleId = res.getIdentifier("alertTitle", "id", "android"); 
     final View title = getDialog().findViewById(titleId); 
     if (title != null) { 
      ((TextView) title).setTextColor(yellow); 
     } 

     // Title divider 
     final int titleDividerId = res.getIdentifier("titleDivider", "id", "android"); 
     final View titleDivider = getDialog().findViewById(titleDividerId); 
     if (titleDivider != null) { 
      titleDivider.setBackgroundColor(yellow); 
     } 
    } 

} 

Attuazione

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    new CustomDialogFragment().show(getFragmentManager(), "customDialogFragment"); 
} 

Risultati

Example

+0

Thank You. Funziona, ma esiste un modo per crearlo con AlertDialog.Builder? Sto usando DialogFragments per le finestre di dialogo. – Vanama

+0

@Vanama Ho fatto una modifica con un esempio usando un 'DialogFragment' e' AlertDialog.Builder'. – adneal

+4

Proprio come un avvertimento per gli utenti futuri che potrebbero imbattersi in questo; per qualche ragione, quando uso solo una finestra di dialogo generica, devo usare "title" come nome identificativo invece di "alertTitle". – zgc7009

Problemi correlati