open full from ejemplo custom activity android android-layout android-fragments android-dialog android-dialogfragment

android - full - dialogfragment kotlin



No se puede hacer que el DialogFragment personalizado sea transparente sobre el Fragment (9)

Aquellos que usan el constructor AlertDialog en onCreateDialog en lugar de onCreateView pueden asignar un tema como el siguiente código. Se puede encontrar un conjunto completo de temas de R.style . No olvide que algunos de ellos son compatibles recientemente y no están disponibles en teléfonos antiguos.

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Translucent); View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null); builder.setView(view); return builder.create(); }

Necesito crear un diálogo sobre un fragmento (que ocupa toda la pantalla). El diálogo debe ser un diálogo flotante que se colocará sobre el fragmento con el fragmento oscurecido fuera del fragmento.

Para el cuadro de diálogo personalizado, tengo un diseño lineal que tiene bordes curvos, haga lo que haga, el cuadro de diálogo tiene un borde negro en todos los lados (muy pequeño). He intentado todo para que sea transparente y se vaya (para 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 establecido 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 (de lo que he visto en línea) y no puedo deshacerme de ese borde negro molesto, puedo pintarlo de blanco o de cualquier otro color si configuro ese fondo 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 ...


En onActivityCreated

getDialog().getWindow().getAttributes().alpha = 0.9f; // An alpha value to apply to this entire window. An alpha of 1.0 means fully opaque and 0.0 means fully transparent

para DialogFragment transparente


Establecer su tema como este funcionó para mí

<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> </style>

Y en su fragmento de diálogo configurado así

public class Progress extends DialogFragment { int style = DialogFragment.STYLE_NO_TITLE; int theme = R.style.MyDialog; public Progress() { } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(style, theme); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.progress, container, false); } }


Para uso completamente transparente: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

Para fondo personalizado, crea un archivo de estilo en tu carpeta de valores (values ​​/ style.xml) y úsalo: 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


Prueba esto si te gusta:

public TransparentDialog() { super(); setStyle(STYLE_NO_FRAME, R.style.AppTheme); }


Pruebe esto ( Cómo crear un DialogFragment 100% personalizado ) este trabajo para el diálogo

Dialog dialog = new Dialog(getActivity()); dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // layout to display dialog.setContentView(R.layout.add_edit); // set color transpartent dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.show();


Puede lograrlo agregando esto en Dialog Fragment o BottomSheetDialogFragment

En el método onCreateDialog

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.getWindow().setGravity(Gravity.BOTTOM); dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); return dialog; }


Tratar

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

en DialogFragment onCreateView


<style name="BaseDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="colorControlNormal">@color/colorAccent</item> <item name="colorControlActivated">@color/colorAccent</item> <item name="android:windowFullscreen">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:colorBackgroundCacheHint">@null</item> <item name="android:colorBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:windowActionModeOverlay">false</item> <item name="android:windowCloseOnTouchOutside">true</item> <item name="android:backgroundDimAmount">.00</item>//this line is changed alpha from 1.0 to 0.0(full transparent) </style> @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_FRAME, R.style.BaseDialogTheme); }