Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to get bottomSheet to open from the top?

I'm opening a NestedScrollView in my app and so far it opens from the bottom of the screen. How do I make it open from the top?

I tried removing the following line:

app:layout_behavior="android.support.design.widget.BottomSheetBehavior"

But the app crashes with the following error:

The view is not associated with BottomSheetBehavior

Is there a way to open the bottom sheet from the top of the screen?

Here is my activity:

ViewPager mainViewPager;
private BottomSheetBehavior mBottomSheetBehavior;
int switcher = 1;
View menuPopupView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.workorder_selection_layout_with_fragment);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    ...
    ....
    ...


    filterButton = (Button)       
    findViewById(R.id.filterButtonMainWorkorderSelection);
    filterButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (switcher == 1) {
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                switcher = 2;
            } else {
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                switcher = 1;
            }


        }
    });

    ///////////////////////////////////////////
    //////////////Buttom Sheet/////////////////
    ///////////////////////////////////////////

    View bottomSheet = findViewById(R.id.bottom_sheet);

    mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);


}

Here is my xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="apps.radwin.wintouch.activities.alignmentActivities.WorkordersSelectionActivity"
    tools:showIn="@layout/app_bar_workorders_selection">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="8dp"
        android:theme="@style/AppTheme.AppBarOverlay">

        <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="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabsLayoutWorkorderSelection"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/workorderSelectionMainViewPagerContainer"
        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="end|bottom"
        android:src="@drawable/add_workorders_plus"
        android:layout_marginLeft="@dimen/fab_margin"
        android:layout_marginRight="@dimen/fab_margin"
        android:layout_marginBottom="@dimen/fab_margin"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true" />


    <android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <android.support.v4.widget.NestedScrollView
            android:id="@+id/bottom_sheet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clipToPadding="true"
            android:background="#293339"
            app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
            >

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toStartOf="@+id/fab">


                ...
                ...
                ...


                <View
                    android:layout_width="match_parent"
                    android:layout_height="20dp"
                    android:layout_below="@+id/workorderFilterPopup_CompleteImage"
                    ></View>


            </RelativeLayout>



        </android.support.v4.widget.NestedScrollView>

    </android.support.design.widget.CoordinatorLayout>




</RelativeLayout>
like image 203
Chief Madog Avatar asked Sep 15 '16 11:09

Chief Madog


People also ask

When to use bottom sheet in Android?

Bottom sheets are displayed as a result of user triggered action, and also it can reveal additional content by swiping up. Bottom sheet can be either modal – that slides up from bottom of the screen to reveal more content or persistent – when they're integrated with the app to display supporting content.

What is Modal bottom sheet?

Modal bottom sheet Modal bottom sheets present a set of choices while blocking interaction with the rest of the screen. They are an alternative to inline menus and simple dialogs on mobile, providing additional room for content, iconography, and actions.

What is bottom sheet in Android?

Bottom Sheet dialogs seem to be replacing regular Android dialogs and menus. The Bottom Sheet is a component that slides up from the bottom of the screen to showcase additional content in your application. A Bottom Sheet dialog is like a message box triggered by the user's actions.


1 Answers

I'm not sure this is what you want, but the following link is a 'top' version of BottomSheetBehavior.

https://github.com/ipuris/AndroidTopSheet/blob/master/library/src/main/java/com/github/techisfun/android/topsheet/TopSheetBehavior.java

Full code including example app: https://github.com/ipuris/AndroidTopSheet

Include the TopSheetBehavior class to your project, then you can use it by changing the app:layout_behavior value to TopSheetBehavior instead of android.support.design.widget.BottomSheetBehavior.

Above code is forked from the original repository, but I fixed some library dependencies (old android.support library -> androidx library) for latest version of Android.

(Maybe this answer is too late for @jernkuan, but I hope this answer can be helpful other developers.)

like image 194
Han Park Avatar answered Oct 14 '22 16:10

Han Park