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
Thank You. Funziona, ma esiste un modo per crearlo con AlertDialog.Builder? Sto usando DialogFragments per le finestre di dialogo. – Vanama
@Vanama Ho fatto una modifica con un esempio usando un 'DialogFragment' e' AlertDialog.Builder'. – adneal
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