Skip to content

Instantly share code, notes, and snippets.

View dorianpavetic's full-sized avatar

Dorian Pavetić dorianpavetic

  • Zagreb, Croatia
View GitHub Profile
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button_open_dialog"
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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/sheet_constraint_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingStart="10dp"
private void setupRatio(BottomSheetDialog bottomSheetDialog) {
FrameLayout bottomSheet = bottomSheetDialog.findViewById(R.id.design_bottom_sheet);
if(bottomSheet == null)
return;
//Retrieve button parameters
buttonLayoutParams = (ConstraintLayout.LayoutParams) binding.sheetButton.getLayoutParams();
//Retrieve bottom sheet parameters
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_COLLAPSED);
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
if(slideOffset > 0) //Sliding happens from 0 (Collapsed) to 1 (Expanded) - if so, calculate margins
buttonLayoutParams.topMargin = (int) (((expandedHeight - buttonHeight) - collapsedMargin) * slideOffset + collapsedMargin);
else //If not sliding above expanded, set initial margin
buttonLayoutParams.topMargin = collapsedMargin;
binding.sheetButton.setLayoutParams(buttonLayoutParams); //Set layout params to button (margin from top)
}