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
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Utwórz niestandardowe płótno
rounded_dialog.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle">
<solid android:color="@android:color/white"/>
<corners android:topLeftRadius="16dp"
android:topRightRadius="16dp"/></shape>

Następnie zastąp
bottomSheetDialogTheme
tagiem
styles.xml
, używając do rysowania jako tła:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
<item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>
</style><style name="AppBottomSheetDialogTheme"
parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/AppModalStyle</item>
</style><style name="AppModalStyle"
parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@drawable/rounded_dialog</item>
</style>

Spowoduje to zmianę wszystkich BottomSheetDialogs w Twojej aplikacji.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dzięki nowej bibliotece

komponenty materiałowe
https://github.com/material-co ... droid
Możesz

dostosuj formularz
https://github.com/material-co ... hapes
twojego komponentu za pomocą


atrybut
shapeAppearanceOverlay
w Twoim stylu (

Uwaga:

To wymaga wersji

1.1.0

)
Po prostu użyj

metoda
https://developer.android.com/ ... gment
BottomSheetDialogFragment
, który zastępuje metodę
onCreateView
, a następnie definiuje własny styl okien dialogowych dolnego arkusza.
Zdefiniuj atrybut
bottomSheetDialogTheme
w
styles.xml
w motywie aplikacji:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
....
<item name="bottomSheetDialogTheme">@style/CustomBottomSheetDialog</item>
</style>

Następnie po prostu zdefiniuj swój ulubiony kształt za pomocą
shapeAppearanceOverlay
<style name="CustomBottomSheetDialog" parent="@style/ThemeOverlay.MaterialComponents.BottomSheetDialog">
<item name="bottomSheetStyle">@style/CustomBottomSheet</item>
</style> <style name="CustomBottomSheet" parent="Widget.MaterialComponents.BottomSheet">
<item name="shapeAppearanceOverlay">@style/CustomShapeAppearanceBottomSheetDialog</item>
</style> <style name="CustomShapeAppearanceBottomSheetDialog" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopRight">16dp</item>
<item name="cornerSizeTopLeft">16dp</item>
<item name="cornerSizeBottomRight">0dp</item>
<item name="cornerSizeBottomLeft">0dp</item>
</style>

https://i.stack.imgur.com/1VmSy.png
Możesz uzyskać to samo zachowanie, zastępując tę ​​metodę w swoim
BottomSheetDialogFragment
(zamiast dodawać
bottomSheetDialogTheme
do motywu aplikacji):
@Override public int getTheme() {
return R.style.CustomBottomSheetDialog;
}

W tym przypadku używasz tylko tego themeOverlay w jednym
BottomSheetDialogFragment
, 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
BottomSheetBehavior
i nie można go zastąpić.

Istnieje jednak obejście - & >

DISCLAIMER:

może przestać działać w przyszłych wersjach !!
Możesz dodać
BottomSheetCallback
do
BottomSheetDialogFragment
:
@NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
((BottomSheetDialog)dialog).getBehavior().addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
//In the EXPANDED STATE apply a new MaterialShapeDrawable with rounded cornes
MaterialShapeDrawable newMaterialShapeDrawable = createMaterialShapeDrawable(bottomSheet);
ViewCompat.setBackground(bottomSheet, newMaterialShapeDrawable);
}
} @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { }
}); return dialog;
} @NotNull private MaterialShapeDrawable createMaterialShapeDrawable(@NonNull View bottomSheet) {
ShapeAppearanceModel shapeAppearanceModel =//Create a ShapeAppearanceModel with the same shapeAppearanceOverlay used in the style
ShapeAppearanceModel.builder(getContext(), 0, R.style.CustomShapeAppearanceBottomSheetDialog)
.build();//Create a new MaterialShapeDrawable (you can't use the original MaterialShapeDrawable in the BottoSheet)
MaterialShapeDrawable currentMaterialShapeDrawable = (MaterialShapeDrawable) bottomSheet.getBackground();
MaterialShapeDrawable newMaterialShapeDrawable = new MaterialShapeDrawable((shapeAppearanceModel));
//Copy the attributes in the new MaterialShapeDrawable
newMaterialShapeDrawable.initializeElevationOverlay(getContext());
newMaterialShapeDrawable.setFillColor(currentMaterialShapeDrawable.getFillColor());
newMaterialShapeDrawable.setTintList(currentMaterialShapeDrawable.getTintList());
newMaterialShapeDrawable.setElevation(currentMaterialShapeDrawable.getElevation());
newMaterialShapeDrawable.setStrokeWidth(currentMaterialShapeDrawable.getStrokeWidth());
newMaterialShapeDrawable.setStrokeColor(currentMaterialShapeDrawable.getStrokeColor());
return newMaterialShapeDrawable;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

BottomSheetDialog
domyślnie ustawia kolor tła na biały, więc rogi nie są widoczne. Aby je pokazać, należy ustawić przezroczystość tła okna dialogowego, zastępując
BottomSheetDialog
style. [/code]Zdefiniuj ten styl w swoim
res/values ​​/ styles/styles.xml
<style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item>
</style><style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>

I ustaw podany styl w swoim BottomSheetDialog
View view = getLayoutInflater().inflate(R.layout.chooser_bottom_sheet, null);
BottomSheetDialog dialog = new BottomSheetDialog(this,R.style.BottomSheetDialog);// Style here
dialog.setContentView(view);
dialog.show();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

utwórz kształt o nazwie rounded_corners_shape
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle">
<corners
android:topLeftRadius="8dp"
android:topRightRadius="8dp"/>
<solid android:color="@color/white"/></shape>

definicja stylu
<style name="AppBottomSheetDialogTheme"
parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/AppModalStyle</item>
</style> <style name="AppModalStyle" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@drawable/rounded_corners_shape</item>
</style>

użyj tego stylu na swoim niestandardowym BottomSheetDialogFragment w ten sposób, zadziała!
public class CustomDialogFragment extends BottomSheetDialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style. AppBottomSheetDialogTheme);
} ...
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz

najnowsza wersja komponentu materiałowego
https://github.com/material-co ... droid
wystarczy zastąpić
ShapeAppearance.MaterialComponents.LargeComponent
(ponieważ dolny arkusz używa tego kształtu) i ustawić żądaną wartość, np .:
<style name="ShapeAppearance.YourApp.LargeComponent" parent="ShapeAppearance.MaterialComponents.LargeComponent">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">12dp</item>
</style>

Następnie ustaw styl w swojej aplikacji:
<item name="shapeAppearanceLargeComponent">@style/ShapeAppearance.YourApp.LargeComponent</item>

Rozwiązanie Gabriele Mariotti
https://stackoverflow.com/a/57627229/7663077
działa w ten sam sposób, ale jest łatwiejsze.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Odpowiedź

ś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
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android">]http://schemas.android.com/apk ... gt%3B[/url]
<solid android:color="@color/white"/>
<corners android:radius="30dp"/>
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp"/>
</shape>
umieść to w swoim głównym węźle xml układu:

ustaw go jako tło w swoim układzie XML
android:background="@drawable/dialog_bg"
i umieść to w roku
onCreateView ()
:

ustaw przezroczyste tło okna dialogowego
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Przetestowałem dzisiaj to samo i tak, miałeś rację co do następującego kodu
this.getDialog().getWindow().setBackgroundDrawableResource(R.drawable.charge_layout_background);

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
@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View rootView = getActivity().getLayoutInflater().inflate(R.layout.view_member_info,null,false);
unbinder = ButterKnife.bind(this, rootView);
adjustUIComponents();
dialog.setContentView(rootView);
FrameLayout bottomSheet = (FrameLayout) dialog.getWindow().findViewById(android.support.design.R.id.design_bottom_sheet);
bottomSheet.setBackgroundResource(R.drawable.container_background);
}

tutaj arkusz dolny to rzeczywisty wygląd, który chcesz zmienić.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

  • Utwórz możliwy do narysowania ... kształt, którego użyjemy jako tła dla dolnego arkusza. Określ odpowiednią wartość promienia górnego lewego i prawego narożnika.
    <xml version="1.0" encoding="utf-8"><shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url] android:shape="rectangle"> <corners android:topLeftRadius="24dp" android:topRightRadius="24dp"/> <padding android:top="2dp"/> <solid android:color="@color/white"/></shape>
  • Teraz utwórz styl dla „Fragmentu okna dialogowego dolnego arkusza”
    <style name="BottomSheet" parent="@style/Widget.Design.BottomSheet.Modal"> <item name="android:background">@drawable/drawable_bottomsheet_background</item> </style> <style name="BaseBottomSheetDialog" parent="@style/Theme.Design.Light.BottomSheetDialog"> <item name="android:windowIsFloating">false</item> <item name="bottomSheetStyle">@style/BottomSheet</item> </style> <style name="BottomSheetDialogTheme" parent="BaseBottomSheetDialog"/>
  • Teraz utwórz niestandardową klasę, która rozszerzy BottomSheetDilogFragment, w którym podasz swój styl.
    open class CustomRoundBottomSheet : BottomSheetDialogFragment() { override fun getTheme(): Int = R.style.BottomSheetDialogTheme override fun onCreateDialog(savedInstanceState: Bundle): Dialog = BottomSheetDialog(requireContext(), theme)}
  • Teraz użyj tej klasy, gdzie chcesz mieć okrągły róg dolnego arkusza. dawny.
    class BottomSheetSuccess : CustomRoundBottomSheet() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle): View { return inflater.inflate(R.layout.bottomsheet_shopcreate_success, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle) { super.onViewCreated(view, savedInstanceState) }}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ta odpowiedź dotyczy tylko pytania o ustawienie koloru tła na
Color.TRANSPARENT
po utworzeniu rysunku z zaokrąglonym tłem dla układu.
Żadna z odpowiedzi nie pomogła mi ustawić kolor tła na
Color.TRANSPARENT
poza zastąpieniem rozwiązania
setupDialog ()
:
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(),
R.layout.fragment_bottom_sheet, null);
dialog.setContentView(contentView);
...
((View) contentView.getParent()).setBackgroundColor(ContextCompat.getColor(getContext(), android.R.color.transparent));
}


BUT
contentView
ustawiony tutaj dla okna dialogowego nie jest
widokiem
, który otrzymujesz w
onViewCreated ()
po nadmuchaniu w
onCreateView ()
. To łamie standardowy przepływ, więc może powodować problemy, takie jak brak możliwości użycia
View Bindings
-
Kotlin Android Extensions
in
onViewCreated ()
Więc trochę poprawiam, żeby ustawić tło w
onActivityCreated ()
:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
(view?.parent as View).setBackgroundColor(Color.TRANSPARENT)
}

Mam nadzieję, że pomoże to tym, którzy mają te same kłopoty.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dodaj te dwie metody do swojej klasy BottomsheetDialogFragment.
public void setDialogBorder(Dialog dialog) {
FrameLayout bottomSheet = (FrameLayout) dialog.getWindow().findViewById(android.support.design.R.id.design_bottom_sheet);
bottomSheet.setBackground(new ColorDrawable(Color.TRANSPARENT));
setMargins(bottomSheet, 10, 0, 10, 20);
} private void setMargins(View view, int left, int top, int right, int bottom) {
if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(left, top, right, bottom);
view.requestLayout();
}
}

Teraz wywołaj metodę
setDialogBorder (dialog)
w metodzie
setupDialog ()
klasy BottomsheetDialogFragment.
Teraz utwórz plik kształtu w folderze do rysowania.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle">
<corners android:radius="20dp"/> <solid android:color="@color/white"/>
<stroke
android:width="1dp"
android:color="@color/transparent"/>
</shape>

Teraz ustaw tło dla okna dialogowego nadrzędnej grupy widoków w pliku xml.
android:background="@drawable/round_border_white"

Gotowy !!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wiem, że istnieje już ogólnie przyjęta odpowiedź na to pytanie. Chciałbym udokumentować problemy, przez które przeszedłem i jak w końcu udało mi się to uruchomić, aby przydało się komuś w przyszłości.
Najpierw użyłem
Theme.AppCompat.Light.DarkActionBar
jako elementu nadrzędnego dla naszego
AppTheme
. Oznaczało to, że rozwiązanie @ Gabriele Mariotti wciąż kończyło się niepowodzeniem z błędem
Nie można zawyżyć podklasy zachowania com.google.android.material.bottomsheet.BottomSheetBehavior
. Naprawiłem to, po prostu zmieniając rodzica na
Theme.MaterialComponents.Light.DarkActionBar
. 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
@null
. Okazuje się, że to dlatego, że
LinearLayout
, 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

Anonimowy użytkownik

Potwierdzenie od:

Utwórz niestandardowy rysunek z zaokrąglonym rogiem i ustaw go jako tło katalogu głównego układu Twojego BottomSheetDialogFragment
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle"><solid android:color="@color/colorPrimary"/><corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="12dp"
android:topRightRadius="12dp"/></shape>

Następnie dodaj poniższy kod do swojej klasy BottomSheetDialogFragment
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(),
R.layout.fragment_bottom_sheet, null);
dialog.setContentView(contentView); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent())
.getLayoutParams();
CoordinatorLayout.Behavior behavior = params.getBehavior();
((View) contentView.getParent()).setBackgroundColor(ContextCompat.getColor(getContext(), android.R.color.transparent));
}

Możesz nawet grać z parametrami, aby ustawić margines, jak pokazano poniżej
params.setMargins(50, 0, 50, 0);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Innym sposobem rozwiązania tego problemu jest rozszerzenie BottomSheetDialog i utworzenie niestandardowej klasy, która odpowiada Twoim potrzebom. Możesz zrobić to samo dla pliku xml układu i dodać tło lub inne potrzebne dostosowania. Ma to również tę zaletę, że nie będziesz polegać na nazwach identyfikatorów używanych przez Androida (android.support.design.R.id.design_bottom_sheet), gdy zmieni się tło (chociaż zmiany nazwy identyfikatora rzadko się zdarzają, AFAIK).
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz zmienić
motyw dolnego arkusza
, aby uzyskać górny okrągły układ
Utwórz niestandardowe płótno background_bottom_sheet_dialog_fragment.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle">
<corners
android:topLeftRadius="8dp"
android:topRightRadius="8dp"/>
<padding android:top="0dp"/>
<solid android:color="@color/white"/>
</shape>

Następnie nadpisz bottomSheetDialogTheme za pomocą styles.xml, używając drawable jako tła:
<!--Bottom sheet-->
<style name="BottomSheet" parent="@style/Widget.Design.BottomSheet.Modal">
<item
name="android:background">@drawable/background_bottom_sheet_dialog_fragment
</item>
</style><style name="BaseBottomSheetDialog"
parent="@style/Theme.Design.Light.BottomSheetDialog">
<item name="android:windowIsFloating">false</item>
<item name="bottomSheetStyle">@style/BottomSheet</item>
</style><style name="BottomSheetDialogTheme" parent="BaseBottomSheetDialog"/>

Zmieni to położenie tła dolnego arkusza

BottomSheetDialog

class SheetFragment() : BottomSheetDialogFragment() { lateinit var binding: SheetFragmentBinding; override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog;
val view = View.inflate(context, R.layout.fragment_bottom_sheet, null); binding = DataBindingUtil.bind(view)!!;
binding.viewModel = SheetFragmentVM(); dialog.setContentView(view); var bottomSheetBehavior = BottomSheetBehavior.from(view.parent as View);
bottomSheetBehavior.setPeekHeight(BottomSheetBehavior.PEEK_HEIGHT_AUTO); bottomSheetBehavior.setBottomSheetCallback(object :
BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {
if (BottomSheetBehavior.STATE_EXPANDED == newState) {
// do on STATE_EXPANDED
}
if (BottomSheetBehavior.STATE_COLLAPSED == newState) {
// do on STATE_COLLAPSED
} if (BottomSheetBehavior.STATE_HIDDEN == newState) {
dismiss() }
} override fun onSlide(bottomSheet: View, slideOffset: Float) {
// do on slide
}
}) return dialog
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

dodaj zaokrąglony kształt narożnika, ustaw go jako tło dla układu głównego
<?xml version="1.0" encoding="utf-8" ?>
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/padding_margin_16_dp"
android:topRightRadius="@dimen/padding_margin_16_dp"/>
<solid android:color="@color/white"/>
</shape>

ustaw przezroczystość tła w Twoim BottomSheetDialogFragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
(view?.parent as View).setBackgroundColor(Color.TRANSPARENT)
}

jego prace dla Contraintlayout, Framelyaout, Linearlayout, Relativelayout.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To zadziałało dla mnie
utwórz kształt o nazwie shape_rounded_dialog
<shape xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:shape="rectangle">
<solid android:color="@color/color_white"/>
<corners
android:topLeftRadius="16dp"
android:topRightRadius="16dp"/>

dodaj następujące style
<style name="AppBottomSheetDialogTheme" parent="Theme.MaterialComponents.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/CustomBottomSheetStyle</item>
</style><style name="CustomBottomSheetStyle" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@drawable/shape_rounded_dialog</item>
</style>

W klasie DialogFragment getTheme jest sposobem na przesłonięcie i zwrócenie stylu do siebie.
@Override
public int getTheme() {
return R.style.AppBottomSheetDialogTheme;
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się