Necesito crear un diálogo sobre un fragmento (que ocupa toda la pantalla). El cuadro de diálogo debe ser un cuadro de diálogo flotante que se colocará sobre el fragmento con el fragmento oscurecido fuera del fragmento.
Para el diálogo personalizado, tengo un diseño lineal que tiene bordes curvos, no importa lo que haga, el diálogo tiene un borde negro en todos los lados (muy pequeño). He intentado todo para hacerlo transparente y desaparecer (de modo que todo el diálogo sea solo el diseño lineal: cuadro curvo)
Para DialogFragment, esto es lo que tengo para onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
populateItemData(item, inflater);
return layout;
}
custom_dialog es solo un LinearLayout que tiene android: backgroung configurado en # 000000
Este es mi estilo para el diálogo personalizado
<style name="CustomDialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:alwaysDrawnWithCache">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Probé todo tipo de combinaciones en este estilo (por lo que he visto en línea) y no puedo deshacerme de ese molesto borde negro, puedo pintarlo de blanco o de cualquier otro color si configuro ese fondo de LinearLayout en cualquier otra cosa que no sea # 000000 ...
He pasado literalmente de 3 a 4 horas en esto, espero que alguien más pueda ayudar ...
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference
.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
lugar. Para que esto no invoque una excepción, debe llamar a un métodoDialogFragment
from Activity o Fragment throughdialogFragment.show(...);
, no a FragmentTransactionadd
.dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
.Pruebe esto ( Cómo crear un DialogFragment 100% personalizado ) este trabajo para el diálogo
fuente
Establecer su tema de esta manera funcionó para mí
Y en su fragmento de diálogo configurado así
fuente
En
onActivityCreated
para
DialogFragment
transparentefuente
Para un uso completamente transparente: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Para un fondo personalizado, cree un archivo de estilo en su carpeta de valores (values / style.xml) y utilícelo: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);
en su archivo de estilo anule el atributo: android: windowBackground para ser @ color / DialogBackgroundBlackSemiTransparent
fuente
Puede lograrlo agregando esto en Dialog Fragment o BottomSheetDialogFragment
En
onCreateDialog
métodofuente
setBackgroundDrawableResource
yclearFlags
funciona para mí (kotlin, android api v28)fuente
Aquellos que usan el constructor AlertDialog en
onCreateDialog
lugar deonCreateView
pueden asignar un tema como el siguiente código. El conjunto completo de temas se puede encontrar en R.style . No olvide que algunos de ellos son compatibles recientemente y no están disponibles en teléfonos con dispositivos antiguos.fuente
Prueba esto si quieres:
fuente
Por respuesta aceptada, en Kotlin
fuente