J'essayais également de faire en sorte que mon dialogue de fragment s'affiche avec un thème différent de celui de son activité, et j'ai suivi la procédure suivante cette solution . Comme certaines personnes l'ont mentionné dans les commentaires, je n'arrivais pas à le faire fonctionner et la boîte de dialogue s'affichait toujours avec le thème spécifié dans le manifeste. Le problème s'est avéré être que je construisais la boîte de dialogue à l'aide de AlertDialog.Builder
dans le onCreateDialog
et n'utilisait donc pas la méthode onCreateView
comme indiqué dans la réponse dont j'ai donné le lien. Et lorsque j'ai instancié la méthode AlertDialog.Builder
Je passais dans le contexte en utilisant getActivity()
alors que j'aurais dû utiliser l'objet instancié ConstextThemeWrapper
à la place.
Voici le code de mon onCreateDialog :
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Create ContextThemeWrapper from the original Activity Context
ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(getActivity(), android.R.style.Theme_DeviceDefault_Light_Dialog);
LayoutInflater inflater = getActivity().getLayoutInflater().cloneInContext(contextThemeWrapper);
// Now take note of the parameter passed into AlertDialog.Builder constructor
AlertDialog.Builder builder = new AlertDialog.Builder(contextThemeWrapper);
View view = inflater.inflate(R.layout.set_server_dialog, null);
mEditText = (EditText) view.findViewById(R.id.txt_server);
mEditText.requestFocus(); // Show soft keyboard automatically
mEditText.setOnEditorActionListener(this);
builder.setView(view);
builder.setTitle(R.string.server_dialog);
builder.setPositiveButton(android.R.string.ok, this);
Dialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(false);
return dialog;
}
A l'origine, j'avais le AlertDialog.Builder
étant instancié comme suit :
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
que j'ai changé en :
AlertDialog.Builder builder = new AlertDialog.Builder(contextThemeWrapper);
Après cette modification, la boîte de dialogue du fragment s'est affichée avec le thème correct. Donc, si quelqu'un d'autre rencontre un problème similaire et utilise la fonction AlertDialog.Builder
puis vérifier le contexte passé au constructeur. J'espère que cela vous aidera ! :)