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);
}