一番下のシートでレイアウトしています。
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/coordinator_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<com.google.Android.material.appbar.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<com.google.Android.material.appbar.CollapsingToolbarLayout
Android:id="@+id/collapsing_toolbar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:contentScrim="@color/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed" />
</com.google.Android.material.appbar.AppBarLayout>
<include layout="@layout/content_main_weather_map" />
<include layout="@layout/bottom_sheet" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
ボトムシートレイアウト
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/bottom_sheet"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/white"
Android:clipToPadding="true"
app:behavior_peekHeight="80dp"
app:layout_behavior="@string/bottom_sheet_behavior">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
Android:id="@+id/weather_recycler"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="8dp"
tools:listitem="@layout/item_weather" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
一番下のシートが前半で開き、再度ドラッグすると全画面表示になることが私にとって必要です。 Googleマップアプリではどのように行われますか。しかし、私はこれを行う方法がわかりません。
@ Massab と @ HeyAlex を試しましたが、希望する動作に一致しませんでした。
Kotlinの次のソリューションでは、ボトムシートのスライドが展開された状態に近い場合は展開されたままになり、半分の状態に近い場合は半分のままになり、折りたたまれた場合は折りたたまれたままになります。
val bottomSheet = view.findViewById<View>(R.id.bottom_sheet1)
val mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
mBottomSheetBehavior.addBottomSheetCallback(object: BottomSheetBehavior.BottomSheetCallback(){
override fun onStateChanged(bottomSheet: View, newState: Int) {
}
override fun onSlide(bottomSheet: View, slideOffset: Float) {
val upperState = 0.66
val lowerState = 0.33
if (bottomSheetEventsFilterBehavior.state == BottomSheetBehavior.STATE_SETTLING ) {
if(slideOffset >= upperState){
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}
if(slideOffset > lowerState && slideOffset < upperState){
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
}
if(slideOffset <= lowerState){
mBottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
}
}
}
})