Как установить высоту для дочерних элементов в Coordinator Layout в процентах? - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу разработать макет, состоящий из: панели инструментов в верхней части макета (которая должна занимать 20% экрана), затем вертикально внизу ViewPager (который должен занимать 60% экрана) и затем, все еще вертикально внизу, BottomSheet (который должен занимать 20% экрана, когда он свернут, и 100% экрана, когда он развернут).
Теперь я объявил нижнюю таблицу следующим образом:

<LinearLayout
    android:id="@+id/BSSECONDTOOLBAR"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="???"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
    android:layout_gravity="bottom"
    android:gravity="bottom"
    android:background="#f44242" />

Так как это должно быть прямым потомком CoordinatorLayout, я не могу использовать атрибут layout_weight.

Мой вопрос: как мне установить высоту BottomSheet в процентах?

1 Ответ

0 голосов
/ 08 ноября 2018

В вашем вопросе есть два вопроса. Во-первых, как заставить нижний лист заполнить родительский элемент при раскрытии.

Это довольно просто: установите android:layout_height="match_parent"

Затем мы должны обратиться к установке высоты взгляда нижнего листа, равной 20% от родительского. Это невозможно сделать в XML, потому что CoordinatorLayout не поддерживает веса или проценты. Поэтому мы должны установить его на Java. Вы можете добавить этот код к вашему onCreate() методу:

// assume `coordinator` is your CoordinatorLayout

coordinator.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        coordinator.getViewTreeObserver().removeOnGlobalLayoutListener(this);

        int twentyPercent = (coordinator.getHeight() / 5);

        // make the toolbar 20% of the screen
        View toolbar = findViewById(R.id.your_toolbar_id);
        ViewGroup.LayoutParams toolbarParams = toolbar.getLayoutParams();
        toolbarParams.height = twentyPercent;
        toolbar.setLayoutParams(toolbarParams);

        // make the viewpager the rest of the screen (60%)
        View pager = findViewById(R.id.your_viewpager_id);
        ViewGroup.MarginLayoutParams pagerParams = (ViewGroup.MarginLayoutParams) pager.getLayoutParams();
        pagerParams.topMargin = twentyPercent;
        pagerParams.height = (coordinator.getHeight() - (twentyPercent * 2));
        pager.setLayoutParams(pagerParams);

        // make the bottomsheet 20% of the screen
        View bottomSheet = findViewById(R.id.BSSECONDTOOLBAR);
        BottomSheetBehavior<View> behavior = BottomSheetBehavior.from(bottomSheet);
        behavior.setPeekHeight(twentyPercent);
    }
});
...