Дизайн нижнего листа Android

Есть ли способ создать фрагмент нижнего листа следующим образом:

Мне нужно установить ширину нижнего листа на 1/4 экрана. Можно ли это реализовать?

Спасибо за вашу помощь.

2 ответа

Решение

Вы можете добиться того же результата с помощью этой библиотеки. Или просто сделайте тот же CornerSheetBehavior. Как видите, это просто BottomSheetBehavior с управлением переводом X представления

Создайте файл макета для нижнего листа как обычно и установите необходимую ширину:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:id="@+id/sheet_background"
    android:layout_width="100dp"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="100dp"
        android:layout_height="match_parent"
    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
        app:behavior_peekHeight="150dp"
        android:id="@+id/drag_up_from_here">

        <!-- Bottom sheet contents here -->

        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

Затем, чтобы он прилипал к правой стороне, вы можете программно добавить нижний лист к макету. Вот как я складываю нижние листы:

    val inflater = getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater
    val bottomSheet = inflater.inflate(R.layout.bottomsheet_layout, null)
    val bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet.findViewById<View>(R.id.drag_up_from_here)

    // Allow user to drag part of bottom sheet
    bottomSheet.findViewById<LinearLayout>(R.id.drag_up_from_here).setOnClickListener {
        if (bottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
            bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED)
        } else {
            bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)
        }
    }

    // Create popup window
    val bottomSheetPopup = PopupWindow(popupViewLower,
                                    LinearLayout.LayoutParams.WRAP_CONTENT,
                                    LinearLayout.LayoutParams.MATCH_PARENT,
                                    false)

    // Get the view you want the bottom sheet added to
    val currentView = findViewById<ConstraintLayout>(R.id.main_view)

    // Display the popup window
    bottomSheetPopup.showAtLocation(currentView, Gravity.BOTTOM, currentView.measuredWidth, 0)

Ключ к тому, чтобы получить его в правой части экрана, - это эта часть:

bottomSheetPopup.showAtLocation(currentView, Gravity.BOTTOM, currentView.measuredWidth, 0)

Где currentView.measueredWidth передается в качестве значения x, при этом нижний лист перемещается полностью вправо.

Изменить: я понял, что вы также просите, чтобы ширина была ровно 1/4 ширины экрана. Для этого программно установите ширину макета нижнего листа равной currentView.measuredWidth / 4. Этот пост хорошо объясняет это: Android view layout_width - как изменить программно?

Другие вопросы по тегам