63

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.No puedo hacer que el DialogFragment personalizado sea transparente sobre el Fragmento

Para el cuadro de diálogo personalizado, tengo un diseño lineal que tiene bordes curvos, haga lo que haga, el diálogo tiene un borde negro en todos los lados (muy pequeño). Lo he intentado todo para que sea transparente y desaparecer (por lo que todo el diálogo es sólo la disposición lineal - cuadro curva)

Para el 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 sólo un LinearLayout que tiene Android: backgroung ajustado en # 000000

Ésta es mi estilo para la costumbre de diálogo

<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 3-4 horas en esto, espero que alguien más puede ayudar a cabo ...

Respuesta

206

Trate

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

en sus DialogFragment 's onCreateView

+3

es posible que también desee eliminar el medio fondo negro transparente (atenuación), verifique esta respuesta: http://stackoverflow.com/a/33800422/2115904 –

+0

Tiene más sentido cuando se escribe como: 'getDialog(). getWindow(). setBackgroundDrawable (nuevo ColorDrawable (Color.TRANSPARENT)); ' – IcyFlame

+2

Elimina también todos los márgenes .. El cuadro de diálogo se expande al ancho completo. – Uday

1

Prueba este si te gusta:

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

probar este (How to I create a 100% custom DialogFragment) 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(); 
3

aquellos que están usando constructor AlertDialog en lugar de onCreateDialogonCreateView puede asignar el tema como 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 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(); 
    } 
+0

Gracias, esto es lo que estaba buscando. –

7

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

5

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

Por encargo del fondo -Crear un archivo de estilo en el que los valores de carpeta (valores/style.xml) y utilizarlo: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);

en su archivo de estilo anular el atributo: androide: windowBackground ser @ Color/DialogBackgroundBlackSemiTransparent

5

Indica tu tema como éste trabajó para mí

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

Y en su diálogo fragmento 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); 
} 
} 
0
<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); 
    } 
Cuestiones relacionadas