63

Ho bisogno di creare una finestra di dialogo su un frammento (che occupa l'intero schermo). La finestra di dialogo deve essere una finestra mobile che verrà posizionata sul frammento con il frammento oscurato all'esterno del frammento.Impossibile rendere trasparente il DialogFragment personalizzato sul frammento

Per la finestra di dialogo personalizzata, ho un layout lineare con bordi curvi, indipendentemente da ciò che faccio, la finestra di dialogo ha un bordo nero confinante su tutti i lati (molto piccolo). Ho provato di tutto per renderla trasparente e andare via (in modo che tutto il dialogo è solo il layout lineare - scatola di curva)

Per la DialogFragment, questo è quello che ho per 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 è solo un LinearLayout che ha Android: backgroung impostato # 000000

Questo è il mio stile per la finestra di dialogo personalizzato

<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> 

ho provato tutti i tipi di combinazioni in questo stile (da quello che ho visto online) e non riesco a liberarmi di quel fastidioso bordo nero, posso dipingerlo di bianco o di qualsiasi altro colore se ho impostato lo sfondo di LinearLayout su qualcosa di diverso da # 000000 ...

ho passato letteralmente 3-4 ore su questo, spero che qualcun altro può dare una mano ...

risposta

206

Prova

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

in S' onCreateView

+3

Si potrebbe anche voler rimuovere lo sfondo nero semitrasparente (oscuramento), controllare questa risposta: http://stackoverflow.com/a/33800422/2115904 –

+0

Tende ad avere più senso se scritto come: 'getDialog(). getWindow(). setBackgroundDrawable (new ColorDrawable (Color.TRANSPARENT)); ' – IcyFlame

+2

Rimuove anche tutti i margini. La finestra di dialogo viene espansa a larghezza intera. – Uday

1

tuoi DialogFragment Prova questo se ti piace:

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

Prova questa (How to I create a 100% custom DialogFragment) questo lavoro per il dialogo

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

Coloro che utilizzano AlertDialog costruttore in onCreateDialog invece di onCreateView può assegnare tema come codice seguente. La serie completa di temi può essere trovata da R.style. Non dimenticare che alcuni di questi sono supportati di recente e non sono disponibili sui vecchi telefoni cellulari.

@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

Grazie, questo è quello che stavo cercando. –

7

In 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 

per DialogFragment trasparente

5

Per uso completamente trasparente: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

Per sfondo personalizzato -Creare un file di stile in te valori cartelle (valori/style.xml) e usarlo: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);

nel file stile ignorare l'atribute: Android: windowBackground essere @ colore/DialogBackgroundBlackSemiTransparent

5

impostare il tema come questo ha funzionato per me

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

E nel tuo finestra frammento impostato in questo modo

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