Не могу сделать заказ DialogFragment прозрачный кусок
мне нужно создать диалог над фрагментом (который занимает весь экран). Диалог должен быть плавающим диалогом, который будет расположен над фрагментом с фрагментом, затемненным снаружи фрагмента..
для пользовательского диалога у меня есть linearLayout, который имеет изогнутые края, независимо от того, что я делаю, диалог имеет черную границу со всех сторон (очень маленький). Я пробовал все, чтобы сделать его прозрачным и уйти (так что все диалоги просто линейные макет-изогнутая коробка)
для DialogFragment, это то, что у меня есть для 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-это просто LinearLayout, который имеет android: backgroung, установленный в #000000
Это мой стиль для пользовательского диалогового окна
<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>
Я пробовал все виды комбинаций в этом стиле (из того, что я видел в интернете), и я не могу избавиться от этой раздражающей черной границы, я могу покрасить ее в белый или любой другой цвет, если я установлю этот фон LinearLayout ничего, кроме #000000...
Я потратил буквально 3-4 часа на это, я надеюсь, что кто-то может помочь...
9 ответов:
попробовать
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));в своем
DialogFragment' sonCreateView
попробуйте это (Как создать 100% пользовательский 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();
на
onActivityCreatedgetDialog().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на
DialogFragmentпрозрачный
для полностью прозрачного использования: setStyle (DialogFragment.STYLE_NO_FRAME, android.Р. стиль.Theme_Translucent_NoTitleBar_Fullscreen);
для пользовательского фона-создайте файл стиля в папке значений (значения / стиль.XML) и использовать его: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.Р. стиль.YOURE_CUSTOM_STYLE);
в свой файл стилей переопределение характеристик: android: windowBackground будет @color / DialogBackgroundBlackSemiTransparent
установите тему, как это работало для меня
<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> </style>а в вашем диалоге фрагмент установлен вот так
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); } }
те, кто использует AlertDialog builder в
onCreateDialogвместоonCreateViewможно присвоить тему, как следующий код. Полный набор тем можно найти от R. style. Не забывайте, что некоторые из них поддерживаются недавно и недоступны на старых телефонах устройств.@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); }
попробуйте это, если вы хотите:
public TransparentDialog() { super(); setStyle(STYLE_NO_FRAME, R.style.AppTheme); }
вы можете достичь, добавив это в Фрагмент или BottomSheetDialogFragment
на
onCreateDialogметод@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; }
Comments