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 ...
Essayer
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dans votre DialogFragment
onCreateView
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();
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
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);
}
}
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
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();
}
<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);
}
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;
}
Essayez ceci si vous aimez:
public TransparentDialog()
{
super();
setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}