BottomSheet с ViewPager и фрагментами?

Я хочу, чтобы это выглядело так же, как в старой версии StreetView.

Обратитесь к этому

Я попробовал BottomSheetBehavior с ViewPager, но динамическая высота его фрагментов не работает должным образом.

Solutions Collecting From Web of "BottomSheet с ViewPager и фрагментами?"

Используя CustomViewPager, мы можем установить высоту фрагмента

public class CustomPager extends ViewPager { private View mCurrentView; public CustomPager(Context context) { super(context); } public CustomPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mCurrentView == null) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); return; } int height = 0; mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = mCurrentView.getMeasuredHeight(); if (h > height) height = h; heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public void measureCurrentView(View currentView) { mCurrentView = currentView; requestLayout(); } public int measureFragment(View view) { if (view == null) return 0; view.measure(0, 0); return view.getMeasuredHeight(); }} 

И добавьте адаптер, добавьте эти строки тоже

 private int mCurrentPosition = -1; @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { super.setPrimaryItem(container, position, object); if (position != mCurrentPosition) { Fragment fragment = (Fragment) object; CustomPager pager = (CustomPager) container; if (fragment != null && fragment.getView() != null) { mCurrentPosition = position; pager.measureCurrentView(fragment.getView()); } } }