2010-12-02 26 views
4

J'ai dans mon code setInverseBackgroundForced défini sur true, mais cela ne semble pas fonctionner. Le code produit un texte blanc sur un fond sombre.builder.setInverseBackgroundForced (true) ne fonctionne pas

Voici mon code constructeur:

public class test { 
    private void createMyLocationDisabledAlert() { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Title") 
      .setInverseBackgroundForced(true) 
      .setMessage(
         "my message") 
         .setCancelable(false) 
         .setPositiveButton("Options", 
           new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           showOptions(); 
          } 
         }); 
      builder.setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
    } 
} 

Que pouvais-je faire mal? J'ai essayé l'appel de méthode dans différentes positions du bloc de code mais à aucune résolution.

Répondre

0

Utilisez une classe de boîte de dialogue personnalisée pour étendre DialogFragment et utilisez-la pour afficher la classe AlertDialog.

Exemple:

public class CustomAlertDialog extends DialogFragment { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Title") 
      .setInverseBackgroundForced(true) 
      .setMessage("my message") 
      .setCancelable(false) 
      .setPositiveButton(
       "Options", 
       new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        showOptions(); 
       } 
      }); 
     builder.setNegativeButton(
      "Cancel", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
     AlertDialog alert = builder.create(); 
     return alert; 
    } 
} 

public class test { 
    private void createMyLocationDisabledAlert() { 
     new CustomAlertDialog().show(getSupportFragmentManager(), Constants.FragmentTagSearch); 
    } 
} 

Note: J'utilisais la bibliothèque de support pour la compatibilité, d'où l'utilisation de getSupportFragmentManager().

0

Moi aussi, je suis confronté au même problème aujourd'hui. Et dans l'état actuel des choses, le doc Android indique que l'API setInverseBackgroundForced() est obsolète et recommande au développeur de spécifier l'arrière-plan de la fenêtre à l'aide du thème de la boîte de dialogue d'alerte.

Remarque: La dépréciation ne devrait idéalement pas empêcher la fonctionnalité de fonctionner. Cela dit, je ne voulais pas étudier pourquoi cela ne fonctionne pas aujourd'hui et j'ai déplacé mon attention pour faire les choses de la manière la plus propre et recommandée par docs Android. Et c'est quelque chose comme le code ci-dessous:

private final int DIALOG_THEME_STYLE = android.support.v7.appcompat.R.style.Base_Theme_AppCompat_Dialog_MinWidth; 

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this, DIALOG_THEME_STYLE); 

Hope that helps!