También estaba tratando de que mi diálogo de fragmentos se mostrara con un tema diferente a su actividad, y seguí esta solución . Como algunas personas mencionaron en los comentarios, no lo estaba haciendo funcionar y el diálogo seguía mostrándose con el tema especificado en el manifiesto. El problema resultó ser que estaba construyendo el diálogo usando AlertDialog.Builder
el onCreateDialog
método y, por lo tanto, no estaba haciendo uso del onCreateView
método como se muestra en la respuesta a la que me vinculé. Y cuando estaba instanciando el AlertDialog.Builder
, estaba pasando en el contexto usando getActivity()
cuando debería haber estado usando el instanciado en su ConstextThemeWrapper
lugar.
Aquí está el código para mi 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;
}
Originalmente tuve la AlertDialog.Builder
instancia de la siguiente manera:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
que cambié a:
AlertDialog.Builder builder = new AlertDialog.Builder(contextThemeWrapper);
Después de este cambio, el diálogo del fragmento se mostró con el tema correcto. Entonces, si alguien más tiene un problema similar y está utilizando el AlertDialog.Builder
, verifique el contexto que se pasa al constructor. ¡Espero que esto ayude! :)