web-dev-qa-db-fra.com

Impossible de rendre le DialogFragment personnalisé transparent sur le fragment

J'ai besoin de créer une boîte de dialogue sur un fragment (qui occupe tout l'écran). La boîte de dialogue doit être une boîte de dialogue flottante qui sera positionnée sur le fragment avec le fragment assombri à l'extérieur du fragment.

Pour la boîte de dialogue personnalisée, j'ai une mise en page linéaire qui a des bords incurvés, peu importe ce que je fais, la boîte de dialogue a une bordure noire de tous les côtés (très petite). J'ai tout essayé pour le rendre transparent et m'en aller (pour que toute la boîte de dialogue ne soit que la disposition linéaire - boîte incurvée)

Pour le DialogFragment, voici ce que j'ai pour 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 est juste un LinearLayout qui a Android: backgroung réglé sur # 000000

C'est mon style pour la boîte de dialogue personnalisée

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

J'ai essayé toutes sortes de combinaisons dans ce style (d'après ce que j'ai vu en ligne) et je ne peux pas me débarrasser de cette bordure noire ennuyeuse, je peux la peindre en blanc ou toute autre couleur si je mets ce fond LinearLayout sur autre chose que # 000000 ...

J'ai passé littéralement 3-4 heures là-dessus, j'espère que quelqu'un d'autre pourra m'aider ...

89
Tolga E

Essayer

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

dans votre DialogFragmentonCreateView

273
C.d.

Essayez ceci ( Comment créer un DialogFragment 100% personnalisé ) ce travail pour la boîte de dialogue

    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();
22
sahar

Dans 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

pour DialogFragment transparent

10
Sanghyun Byun

Définissez votre thème comme ça a fonctionné pour moi

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

Et dans votre fragment de dialogue défini comme ceci

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);
}
}
10
Ameen Maheen

Pour une utilisation totalement transparente: setStyle (DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

Pour un arrière-plan personnalisé - créez un fichier de style dans votre dossier de valeurs (values ​​/ style.xml) et utilisez-le: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);

dans votre fichier de style, remplacez l'attribut: Android: windowBackground pour être @ color/DialogBackgroundBlackSemiTransparent

6
user3193413

Ceux qui utilisent le générateur AlertDialog dans onCreateDialog au lieu de onCreateView peuvent attribuer un thème comme le code suivant. Un ensemble complet de thèmes peut être trouvé à partir de R.style . N'oubliez pas que certains d'entre eux ont été pris en charge récemment et ne sont pas disponibles sur les anciens téléphones de l'appareil.

@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();
    }
3
Hesam
<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);
    }
2
NickUnuchek

Vous pouvez y parvenir en l'ajoutant dans Fragment de boîte de dialogue ou BottomSheetDialogFragment

Dans onCreateDialog méthode

@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;
   }
2
Nanda Gopal

Essayez ceci si vous aimez:

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