Show and Hide Bottom Sheet Programmatically

Inside your onClick() of the button use: sheet.show().

Then when you want to dismiss it, use sheet.dismiss();

Here below a possible solution:

BottomSheet sheet = new BottomSheet.Builder(...).build();
Button button = (Button)findViewById(R.id.mybutton);
button.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //you can use isShowing() because BottomSheet inherit from Dialog class
        if (sheet.isShowing()){
            sheet.dismiss();
        } else {
            sheet.show();    
        }
    }
});

For showing the Bottom Sheet use this code:

bottomSheetInfoBehavior.setHideable(false);
bottomSheetInfoBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);

For Hiding the Bottom sheet use this code:

bottomSheetInfoBehavior.setHideable(true);
bottomSheetInfoBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);

To close the BottomSheetDialogFragment from inside the fragment you can call:

dismiss();

To show or hide the BottomSheetDialogFragment from the activity you can simply call:

bottomSheetDialogFragment.dismiss();//to hide it
bottomSheetDialogFragment.show(getSupportFragmentManager(),tag);// to show it