Intereting Posts
Null keyevent и actionid = 0 в onEditorAction () (Jelly Bean / Nexus 7) Как узнать, завершена ли работа андроида из внешней команды adb? Android: каково значение по умолчанию для android: dividerHeight для просмотра списка Начать операцию с анимации Не удалось подключиться к Интернет-разъему с Android-клиента Должен ли доступ к SharedPreferences делать из потока пользовательского интерфейса? Как установить разделитель между столбцами в tablelayout? Android – ошибка с EditText с параметром цифр BasicAuthentication в android для веб-просмотра не работает Добавить один проект Android в качестве библиотеки в приложении AOSP Android – почему существует различное значение Action_mask для разных устройств Цвет фона в CardView всегда белый Требуется неизвестный модуль «ReactPerf» при интеграции React Native с существующим Android-приложением Анимация текста с помощью TextSwitcher в Android Retrofit @Body, отображающийся как параметр в HTTP-запросе

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

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

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

Я попробовал BottomSheetBehavior с 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()); } } }