BottomSheetDialog с прозрачным фоном

Я хотел бы отобразить диалог нижнего листа, который был бы меньше ширины экрана.

Например, параметр «Совместный доступ» в Google Play Музыке на Nexus 9.

Вариант Share из Google Play Музыки на Nexus 9

Вы знаете, как достичь этого?

На данный момент я просто добился уменьшения ширины содержимого листа, но фон по-прежнему находится на ширине экрана и отображает белый фон.

Некоторый код:

build.gradle

compile 'com.android.support:design:23.3.0' 

Основная деятельность

 @Override protected void onCreate(Bundle savedInstanceState) { ... mBottomSheetDialog = new BottomSheetDialog(this); mBottomSheetDialog.setContentView(R.layout.sheet_test); mBottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { mBottomSheetDialog = null; } }); mBottomSheetDialog.show(); } 

sheet_test

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView style="@style/TextAppearance.AppCompat.Body1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:text="Some Text" android:textColor="@color/colorPrimary" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#ddd" /> <TextView style="@style/TextAppearance.AppCompat.Body1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="16dp" android:text="Some Text" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#ddd" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> 1 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView style="@style/TextAppearance.AppCompat.Body1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:text="Some Text" android:textColor="@color/colorPrimary" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#ddd" /> <TextView style="@style/TextAppearance.AppCompat.Body1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="16dp" android:text="Some Text" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#ddd" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> 1 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView style="@style/TextAppearance.AppCompat.Body1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:text="Some Text" android:textColor="@color/colorPrimary" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#ddd" /> <TextView style="@style/TextAppearance.AppCompat.Body1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="16dp" android:text="Some Text" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#ddd" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> 

Это простейшее решение для заданного прозрачного фона BottomSheetDialogFragment

((View) contentView.getParent ()). SetBackgroundColor (getResources (). GetColor (android.R.color.transparent));

 public class ShareOneTouchAlertNewBottom extends 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(getResources().getColor(android.R.color.transparent)); } } 

Итак, я выяснил 2 решения.

Лучший:

Создайте действие с прозрачным фоном только для вашего нижнего листа. Внедрите свой собственный макет с компоновкой координатора и нижним листом. Задайте нужный запас. Задайте нужное содержимое.

Еще не проверено.

Ленивый:

Extends BottomSheetDialogFragment , onActivityCreated добавляет:

  Resources resources = getResources(); // Set margin for Landscape Mode. Maybe a more elegant solution will be to implements our own bottom sheet with our own margins. if (resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { assert getView() != null; View parent = (View) getView().getParent(); CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) parent.getLayoutParams(); layoutParams.setMargins( resources.getDimensionPixelSize(R.dimen.bottom_sheet_margin_left), // 64dp 0, resources.getDimensionPixelSize(R.dimen.bottom_sheet_margin_right), // 64dp 0 ); parent.setLayoutParams(layoutParams); } 

Попробуйте этот код.

 View contentView=LayoutInflater.from(getContext()).inflate(R.layout.bs_add_event,null); mBottomSheetDialog.setContentView(contentView); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams(); params.setMargins(50,50,50,50); // set margin as your wish. 

А также изменить android:layout_width="100dp" in nestedScroolView для android:layout_width="match_parent"

Немного взлома, но он работает для того, чтобы сделать фон прозрачным. Очевидно, вы можете заменить «прозрачный» любым цветом.

 mBottomSheetDialog.getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundResource(android.R.color.transparent);