how to set height of BottomSheet full parent?
Solution 1
Replace
behavior.setPeekHeight(100);
with
behavior.setPeekHeight(screenUtils.getHeight());
will solve your problem.
Solution 2
public class ScreenUtils {
Context ctx;
DisplayMetrics metrics;
public ScreenUtils(Context ctx) {
this.ctx = ctx;
WindowManager wm = (WindowManager) ctx
.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
metrics = new DisplayMetrics();
display.getMetrics(metrics);
}
public int getHeight() {
return metrics.heightPixels;
}
public int getWidth() {
return metrics.widthPixels;
}
public int getRealHeight() {
return metrics.heightPixels / metrics.densityDpi;
}
public int getRealWidth() {
return metrics.widthPixels / metrics.densityDpi;
}
public int getDensity() {
return metrics.densityDpi;
}
public int getScale(int picWidth) {
Display display
= ((WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
int width = display.getWidth();
Double val = new Double(width) / new Double(picWidth);
val = val * 100d;
return val.intValue();
}
}
Using the above class we can set peek height like this.It will give the screen's maximum height.
BottomSheetBehavior mBehavior = BottomSheetBehavior.from((View) contentView.getParent());
ScreenUtils screenUtils=new ScreenUtils(getActivity());
mBehavior.setPeekHeight(screenUtils.getHeight());
Solution 3
don't use BottomSheetDialog
just use default behaviour like below(remove BottomSheetDialog
code)
@Override
public void onShareClick() {
if (behavior.getState() == BottomSheetBehavior.STATE_HIDDEN || behavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else {
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
use BottomSheet
layout to match_parent
<FrameLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:behavior_hideable="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
</FrameLayout>
by above changes you have see BottomSheet with fullscreen
Solution 4
For BottomSheetDialog you need to set fitContents to false
behavior.isFitToContents=false
behavior.state=BottomSheetBehavior.STATE_EXPANDED
Solution 5
Simply add this (Kotlin):
bottomSheetDialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED
Anuj Sharma
An accomplished software engineer specializing in object-oriented design and analysis with extensive experience in designing and coding Android apps and enterprise apps. Mobile Domain- Android SDK, Material-Design, Flutter Back-End Domain- Spring Boot, Microservices, Docker, Postgres, CICD, Some knowledge of Python and Django Framework.
Updated on June 18, 2022Comments
-
Anuj Sharma almost 2 years
I am trying to call BottomSheet using android-support-library 23.2 on Click of button. Its working fine but not taking full height. It reside below
AppBarLayout
. I didn't find any solution on Android DocumentationThis is my Screen layout
Here is my code.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="snap|enterAlwaysCollapsed" app:popupTheme="@style/AppTheme.PopupOverlay" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" app:tabGravity="fill" app:tabIndicatorColor="#5be5ad" app:tabIndicatorHeight="4dp" app:tabMode="fixed" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" /> <!-- BottomSheet Layout --> <FrameLayout android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="fill_parent" app:behavior_hideable="true" app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> </FrameLayout> </android.support.design.widget.CoordinatorLayout>
MainActivity.java
View bottomSheet; private BottomSheetDialog mBottomSheetDialog; private void initView(){ /* Bottom Sheet Initialization */ CoordinatorLayout coordinatorLayout = (CoordinatorLayout)findViewById(R.id.main_content); // The View with the BottomSheetBehavior bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet); behavior = BottomSheetBehavior.from(bottomSheet); // behavior.setState(BottomSheetBehavior.STATE_HIDDEN); behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { // React to state change CommonMethods.getInstance().e("onStateChanged", "onStateChanged:" + newState); if (newState == BottomSheetBehavior.STATE_EXPANDED) { fab.setVisibility(View.GONE); } else { fab.setVisibility(View.VISIBLE); } } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { // React to dragging events CommonMethods.getInstance().e("onSlide", "onSlide"); } }); behavior.setPeekHeight(100); }
Click Event Code:
@Override public void onShareClick() { if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } if(mBottomSheetDialog==null){ mBottomSheetDialog = new BottomSheetDialog(this); View view = getLayoutInflater().inflate(R.layout.layout_bottomsheet, null); mBottomSheetDialog.setContentView(view); } mBottomSheetDialog.show(); mBottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { mBottomSheetDialog = null; } }); }
-
Anuj Sharma about 8 yearsIts going below AppBarlayout, but it should overlap AppBarLayout
-
Anuj Sharma about 8 yearsI had tried your code but its not covering Toolbar, its going behing Toolbar.
-
Kezz over 7 yearsCould you perhaps explain a bit more how the class above and the code solves this problem?
-
zihadrizkyef about 2 yearsnot work if content is smaller than screen height
-
zihadrizkyef about 2 yearsthis doesn't work for me