Мне нужно создать диалог над фрагментом (который занимает весь экран). Диалог должен быть плавающим диалоговым окном, который будет расположен над фрагментом, причем фрагмент затемнен за пределами фрагмента.
Для настраиваемого диалогового окна у меня есть 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 часа, надеюсь, кто-то еще может помочь ...
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference
.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
вместо этого позвонить . Чтобы это не вызвало исключения, вы должны вызвать методDialogFragment
from Activity или Fragment throughdialogFragment.show(...);
, а не FragmentTransactionadd
.dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
.Попробуйте это ( как создать 100% настраиваемый DialogFragment ) эту работу для диалога
источник
Установите свою тему, как это сработало для меня
И в вашем диалоговом фрагменте установите такой
источник
В
onActivityCreated
для
DialogFragment
прозрачныхисточник
Для полностью прозрачного использования: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Для пользовательского фона - создайте файл стиля в папке значений (values / style.xml) и используйте его: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);
в вашем файле стиля переопределите атрибут: android: windowBackground как @ color / DialogBackgroundBlackSemiTransparent
источник
Вы можете добиться этого, добавив это в Dialog Fragment или BottomSheetDialogFragment
В
onCreateDialog
методеисточник
setBackgroundDrawableResource
иclearFlags
у меня работает (kotlin, android api v28)источник
Те, кто
onCreateDialog
вместо этого использует построитель AlertDialog,onCreateView
могут назначить тему, как показано ниже. Полный набор тем можно найти в R.style . Не забывайте, что некоторые из них поддерживаются недавно и недоступны на старых телефонах.источник
Попробуйте это, если вам нравится:
источник
За принятый ответ в Котлине
источник