Ich muss einen Dialog über ein Fragment erstellen (der den gesamten Bildschirm einnimmt). Der Dialog muss ein schwebender Dialog sein, der über dem Fragment positioniert wird, wobei das Fragment außerhalb des Fragments abgedunkelt ist.
Für den benutzerdefinierten Dialog habe ich ein lineares Layout mit gekrümmten Kanten, egal was ich mache, der Dialog hat an allen Seiten einen schwarzen Rand (sehr klein). Ich habe alles versucht, um es transparent zu machen und zu verschwinden (so dass der gesamte Dialog nur das lineare Layout ist - gebogenes Kästchen)
Für das DialogFragment ist dies das, was ich für onCreateView habe
@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 ist nur ein LinearLayout mit Android: backgroung auf # 000000
Dies ist mein Stil für den benutzerdefinierten Dialog
<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>
Ich habe alle Arten von Kombinationen in diesem Stil ausprobiert (von dem, was ich online gesehen habe) und ich kann diese lästigen schwarzen Ränder nicht loswerden. Ich kann es weiß oder in einer anderen Farbe malen, wenn ich den LinearLayout-Hintergrund auf etwas anderes als setze # 000000 ...
Ich habe buchstäblich 3-4 Stunden damit verbracht, ich hoffe, jemand anderes kann helfen ...
Versuchen
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
in Ihrem DialogFragment
's onCreateView
Versuchen Sie dies ( Wie erstelle ich ein 100% benutzerdefiniertes DialogFragment? )
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();
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
für DialogFragment
transparent
Stellen Sie Ihr Thema so ein, dass es für mich funktioniert hat
<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
Und in Ihrem Dialogfragment setzen Sie so
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);
}
}
Für eine vollständig transparente Verwendung: setStyle (DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Für einen benutzerdefinierten Hintergrund erstellen Sie eine Stildatei in Ihrem Werteverzeichnis (values / style.xml) und verwenden diese: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);
überschreiben Sie in Ihrer Stildatei den Attribut: Android: windowBackground, um @ color/DialogBackgroundBlackSemiTransparent zu sein
Diejenigen, die den Builder für AlertDialog in onCreateDialog
anstelle von onCreateView
verwenden, können Themen wie den folgenden Code zuweisen. Ein vollständiges Themenset finden Sie unter R.style . Vergessen Sie nicht, dass einige von ihnen kürzlich unterstützt wurden und auf alten Telefonen nicht verfügbar sind.
@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);
}
Sie können dies erreichen, indem Sie dies in Dialogfragment oder BottomSheetDialogFragment hinzufügen
In onCreateDialog
Methode
@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;
}
Versuchen Sie dies, wenn Sie möchten:
public TransparentDialog()
{
super();
setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}