BottomSheetDialogFragment,圓角背景,去除層疊,百分比設定高度
阿新 • • 發佈:2018-11-16
基本使用很簡單:
public class FullSheetDialogFragment extends BottomSheetDialogFragment { private BottomSheetBehavior mBehavior; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState); View view = View.inflate(getContext(), R.layout.dialog_bottom_sheet, null); dialog.setContentView(view); mBehavior = BottomSheetBehavior.from((View) view.getParent()); return dialog; } @Override public void onStart() { super.onStart(); //預設全屏展開 mBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); } public void doclick(View v) { //點選任意佈局關閉 mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); } }
呼叫BottomSheetDialogFragment展示
new FullSheetDialogFragment().show(getSupportFragmentManager(), "dialog");
下面是一些坑。
dialog按螢幕高度百分比調整大小:
BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState); mContext = getContext(); View view = View.inflate(mContext, R.layout.dialog_bottom_sheet1, null); dialog.setContentView(view); ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); int height = (int) (mContext.getResources().getDisplayMetrics().heightPixels * 0.9); layoutParams.height = height; view.setLayoutParams(layoutParams);
去除層疊顯示(就是去掉完全展開,中間狀態,隱藏中的中間狀態):
//height就是整個dialog的高度,同上面的height。如果設定為0也可以實現效果,但會導致滑動關閉後,有一層陰影遮罩,
//需要點選一次才能消失。原因是設定為0,滑動到看不見時,其實是處於中間狀態,並沒有完全關閉dialog。
mBehavior.setPeekHeight(height);
圓角背景:
//先設定背景為透明 dialog.getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); //shape <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:topLeftRadius="20dp" android:topRightRadius="20dp"></corners> <solid android:color="@color/white"></solid> </shape>