Дизайн нижнего листа Android
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 - как изменить программно?