Модальный нижний лист: как установить 8dp из панели действий?

Я хочу использовать модальный нижний лист. В руководстве по материальному дизайну сказано, что полностью развернутый нижний лист должен быть на 8 dp ниже панели действий. Как я могу этого добиться? Я хочу, чтобы на панели действий оставался знак X, чтобы закрывать нижний лист при полном раскрытии.

Когда я пробовал использовать нижний лист linearLayout, при раскрытии состояния он занимал весь экран.

Макет моего нижнего листа

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="@dimen/design_bottom_sheet_modal_elevation"
android:orientation="vertical">


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"/>


<Button
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginRight="10dp"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:text="ADD"/>

</LinearLayout>

person abat    schedule 31.07.2016    source источник
comment
Не могли бы вы показать свой XML, пожалуйста?   -  person OneCricketeer    schedule 31.07.2016
comment
@abat, удалось это реализовать?   -  person jzarsuelo    schedule 11.08.2016
comment
@jzarsuelo: см. мой ответ   -  person abat    schedule 20.08.2016


Ответы (1)


Я не нашел легкого пути, но вот что я сделал. Я измерил высоту строки состояния и панели действий и вычел ее из высоты экрана. У меня хорошо работает. Не уверен, что это лучший способ. `

private int getBottomSheetMaximumHeight() {
        // get toolbar height
        Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        int toolbarHeight = toolbar.getHeight();

        //get status bar height
        Rect rectangle = new Rect();
        Window window = getActivity().getWindow();
        window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
        int windowHeight = rectangle.bottom;

        // material design recommended bottomsheet padding from actionbar
        final int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,8, getContext().getResources().getDisplayMetrics());

        // maximum height of the bottomsheet
        return windowHeight - toolbarHeight - rectangle.top - padding;

    }`
person abat    schedule 20.08.2016