Okrągły róg dla BottomSheetDialogFragment
Mam niestandardowy BttomSheetDialogFragment i chcę mieć zaokrąglone rogi u góry widoku z dołu
to jest moja niestandardowa klasa, która nadyma mój układ, który chcę zobaczyć od dołu
View mView;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.charge_layout, container, false);
initChargeLayoutViews();
return mView;
}
a także mam ten plik zasobów xml jako tło:
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle"
>
<corners android:topRightRadius="35dp"
android:topLeftRadius="35dp"
/>
<solid android:color="@color/white"/><padding android:top="10dp"
android:bottom="10dp"
android:right="16dp"
android:left="16dp"/>
ale problem polega na tym, że kiedy ustawię ten plik zasobów jako tło elementu głównego mojego układu, rogi nadal nie są zaokrąglone
i nie mogę użyć poniższego kodu:
this.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.charge_layout_background);
ponieważ jego domyślnym tłem zastępującym jest BottomSheetDialog i nie będzie półprzezroczystej szarości nad moim dolnym widokiem
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
16 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Następnie zastąp tagiem , używając do rysowania jako tła:
Spowoduje to zmianę wszystkich BottomSheetDialogs w Twojej aplikacji.
Anonimowy użytkownik
Potwierdzenie od:
komponenty materiałowe
https://github.com/material-co ... droid
Możesz
dostosuj formularz
https://github.com/material-co ... hapes
twojego komponentu za pomocą
atrybut w Twoim stylu (
Uwaga:
To wymaga wersji
1.1.0
)
Po prostu użyj
metoda
https://developer.android.com/ ... gment , który zastępuje metodę , a następnie definiuje własny styl okien dialogowych dolnego arkusza.
Zdefiniuj atrybut w w motywie aplikacji:
Następnie po prostu zdefiniuj swój ulubiony kształt za pomocą
https://i.stack.imgur.com/1VmSy.png
Możesz uzyskać to samo zachowanie, zastępując tę metodę w swoim (zamiast dodawać do motywu aplikacji):
W tym przypadku używasz tylko tego themeOverlay w jednym , a nie w całej aplikacji.
Ważna uwaga
o
stan rozwinięty
:
Rozszerzony arkusz dolny
ma płaskie rogi
... Możesz sprawdzić oficjalny komentarz pod adresem
repozytorium
https://github.com/material-co ... 68983
github :
Nasz zespół projektowy jest przekonany, że zaokrąglone rogi wskazują przewijaną treść, a płaskie rogi wskazują brak dodatkowej treści. Dlatego nie chcą, abyśmy dodawali tę zmianę za pomocą fitToContents.
To zachowanie jest zapewniane przez i nie można go zastąpić.
Istnieje jednak obejście - & >
DISCLAIMER:
może przestać działać w przyszłych wersjach !!
Możesz dodać do :
Anonimowy użytkownik
Potwierdzenie od:
I ustaw podany styl w swoim BottomSheetDialog
Anonimowy użytkownik
Potwierdzenie od:
definicja stylu
użyj tego stylu na swoim niestandardowym BottomSheetDialogFragment w ten sposób, zadziała!
Anonimowy użytkownik
Potwierdzenie od:
najnowsza wersja komponentu materiałowego
https://github.com/material-co ... droid
wystarczy zastąpić (ponieważ dolny arkusz używa tego kształtu) i ustawić żądaną wartość, np .:
Następnie ustaw styl w swojej aplikacji:
Rozwiązanie Gabriele Mariotti
https://stackoverflow.com/a/57627229/7663077
działa w ten sam sposób, ale jest łatwiejsze.
Anonimowy użytkownik
Potwierdzenie od:
śpiączka yip
https://stackoverflow.com/users/4625990/koma-yip
z
inne pytanie
https://stackoverflow.com/a/28937224/5273427
pracował dla mnie, powinieneś spróbować.
Utwórz plik XML w programie do rysowania, powiedz dialog_bg.xml
umieść to w swoim głównym węźle xml układu:
ustaw go jako tło w swoim układzie XML
i umieść to w roku :
ustaw przezroczyste tło okna dialogowego
Anonimowy użytkownik
Potwierdzenie od:
dotyczy to również fragmentarycznego tła, więc zamiast tego musisz pobrać dolny widok arkusza z okna dialogowego i zmienić tło tym kodem
tutaj arkusz dolny to rzeczywisty wygląd, który chcesz zmienić.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Żadna z odpowiedzi nie pomogła mi ustawić kolor tła na poza zastąpieniem rozwiązania :
BUT
ustawiony tutaj dla okna dialogowego nie jest , który otrzymujesz w po nadmuchaniu w . To łamie standardowy przepływ, więc może powodować problemy, takie jak brak możliwości użycia - in Więc trochę poprawiam, żeby ustawić tło w :
Mam nadzieję, że pomoże to tym, którzy mają te same kłopoty.
Anonimowy użytkownik
Potwierdzenie od:
Teraz wywołaj metodę w metodzie klasy BottomsheetDialogFragment.
Teraz utwórz plik kształtu w folderze do rysowania.
Teraz ustaw tło dla okna dialogowego nadrzędnej grupy widoków w pliku xml.
Gotowy !!
Anonimowy użytkownik
Potwierdzenie od:
Najpierw użyłem jako elementu nadrzędnego dla naszego . Oznaczało to, że rozwiązanie @ Gabriele Mariotti wciąż kończyło się niepowodzeniem z błędem . Naprawiłem to, po prostu zmieniając rodzica na . Nie wpłynęło to w żaden sposób na nasz temat, ale RTE zniknęło. Możesz również rozwiązać ten problem, po prostu dołączając wymagane elementy do swojego stylu. Ale nie zawracałem sobie głowy ustalaniem, jakie style są wymagane dla zachowania BottomSheetBehavior.
Po drugie, bez względu na to, jak bardzo się starałem, nie mogłem uzyskać rzeczywistego układu ramki (którym był BottomSheetDialogFragment) przy użyciu zaokrąglonych rogów. Pomyślałem, że ustawienie tego na obraz, który można narysować, działa, ale nie z kształtem lub . Okazuje się, że to dlatego, że , którego używałem, miał specyficzne tło. To było ponad jakimkolwiek tłem w stylu. Usunięcie tego ostatecznie spowodowało zaokrąglenie rogów.
Nie wymagałem też ustawiania kształtu tła w rogach. Rozwiązanie Mariotti zadziałało, gdy tylko wprowadziłem powyższe zmiany. Jednak aby ustawić kolor tła tak, jak chciałem, musiałem zastąpić element „backgroundTint”.
PS: Jestem nowy w programowaniu na Androida i utrzymuję starą aplikację, która została stworzona do użytku wewnętrznego w naszej uczelni. Nie znam systemu układu ani biblioteki materiałów Androida. Prawdopodobnie dlatego zajęło mi to 3 dni. Mam nadzieję, że przyda się to komuś w przyszłości.
Anonimowy użytkownik
Potwierdzenie od:
Następnie dodaj poniższy kod do swojej klasy BottomSheetDialogFragment
Możesz nawet grać z parametrami, aby ustawić margines, jak pokazano poniżej
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Utwórz niestandardowe płótno background_bottom_sheet_dialog_fragment.xml:
Następnie nadpisz bottomSheetDialogTheme za pomocą styles.xml, używając drawable jako tła:
Zmieni to położenie tła dolnego arkusza
BottomSheetDialog
Anonimowy użytkownik
Potwierdzenie od:
ustaw przezroczystość tła w Twoim BottomSheetDialogFragment
jego prace dla Contraintlayout, Framelyaout, Linearlayout, Relativelayout.
Anonimowy użytkownik
Potwierdzenie od:
utwórz kształt o nazwie shape_rounded_dialog
dodaj następujące style
W klasie DialogFragment getTheme jest sposobem na przesłonięcie i zwrócenie stylu do siebie.