Muszę utworzyć okno dialogowe na fragmencie (który zajmuje cały ekran). Okno dialogowe musi być pływającym oknem dialogowym, które zostanie umieszczone nad fragmentem z przyciemnionym fragmentem poza fragmentem.
W przypadku niestandardowego okna dialogowego mam linearLayout, który ma zakrzywione krawędzie, bez względu na to, co robię, okno dialogowe ma czarne obramowanie ze wszystkich stron (bardzo małe). Próbowałem wszystkiego, aby było przezroczyste i zniknęło (tak, że całe okno dialogowe to tylko układ liniowy - zakrzywione pudełko)
W przypadku DialogFragment mam to dla 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 to po prostu LinearLayout, który ma android: backgroung ustawiony na # 000000
To jest mój styl dla niestandardowego okna dialogowego
<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>
Próbowałem różnych kombinacji w tym stylu (z tego, co widziałem online) i nie mogę pozbyć się tej denerwującej czarnej obwódki, mogę pomalować ją na biało lub na dowolny inny kolor, jeśli ustawię tło LinearLayout na cokolwiek innego niż # 000000 ...
Spędziłem nad tym dosłownie 3-4 godziny, mam nadzieję, że ktoś inny może pomóc ...
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);
Zamiast tego możesz też zadzwonić . Aby nie wywoływało to wyjątku, należy wywołać metodęDialogFragment
from Activity lub Fragment za pomocądialogFragment.show(...);
metody, a nie FragmentTransactionadd
.dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
.Spróbuj tego ( jak utworzyć w 100% niestandardowy DialogFragment ) to działa dla okna dialogowego
źródło
Ustaw swój motyw tak, aby działał dla mnie
A w twoim fragmencie okna dialogowego ustaw w ten sposób
źródło
W
onActivityCreated
dla
DialogFragment
przezroczystychźródło
Do całkowicie przezroczystego użycia: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Dla niestandardowego tła - utwórz plik stylu w folderze wartości (values / style.xml) i użyj go: setStyle (DialogFragment.STYLE_NO_FRAME, nazwa_pakietu.R.style.YOURE_CUSTOM_STYLE);
w pliku stylu zastąp atrybut: android: windowBackground na @ color / DialogBackgroundBlackSemiTransparent
źródło
Możesz to osiągnąć, dodając to w Dialog Fragment lub BottomSheetDialogFragment
W
onCreateDialog
metodzieźródło
setBackgroundDrawableResource
iclearFlags
działa dla mnie (kotlin, Android api v28)źródło
Ci, którzy używają konstruktora AlertDialog
onCreateDialog
zamiast,onCreateView
mogą przypisać motyw, taki jak następujący kod. Kompletny zestaw motywów można znaleźć w R.style . Nie zapominaj, że niektóre z nich były ostatnio obsługiwane i nie są dostępne na starych telefonach.źródło
Spróbuj tego, jeśli chcesz:
źródło
Za zaakceptowaną odpowiedź w Kotlinie
źródło