BottomSheetDialogFragment 如何設置高度和禁止滑動(Kotlin)


主要是獲取dialog 的BottomSheetBehavior 然后設置 setPeekHeight 和 BottomSheetCallback.

package com.example.mychartdemo.view

import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.coordinatorlayout.widget.CoordinatorLayout
import com.example.mychartdemo.R
import com.example.mychartdemo.databinding.FragmentBottomTempletFixedBinding
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
import com.google.android.material.bottomsheet.BottomSheetDialogFragment

class BottomTempletFixedFragment: BottomSheetDialogFragment() {

    private lateinit var binding: FragmentBottomTempletFixedBinding


    //
    private var mBottomSheetBehavior: BottomSheetBehavior<View>? = null
    private val mBottomSheetBehaviorCallback: BottomSheetCallback = object : BottomSheetCallback() {
        override fun onStateChanged(bottomSheet: View, newState: Int) {
            //禁止拖拽,
            if (newState == BottomSheetBehavior.STATE_DRAGGING) {
                //設置為收縮狀態
                mBottomSheetBehavior!!.state = BottomSheetBehavior.STATE_COLLAPSED
            }
        }

        override fun onSlide(bottomSheet: View, slideOffset: Float) {}
    }


    override fun onStart() {
        super.onStart()
        val dialog = dialog
        if (dialog != null) {
            val bottomSheet = dialog.findViewById<View>(R.id.design_bottom_sheet)
            bottomSheet.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
        }
        val view = view
        view!!.post {
            val parent = view.parent as View
            val params = parent.layoutParams as CoordinatorLayout.LayoutParams
            val behavior = params.behavior
            mBottomSheetBehavior = behavior as BottomSheetBehavior<View>?
            mBottomSheetBehavior!!.setBottomSheetCallback(mBottomSheetBehaviorCallback)
            val display = requireActivity().windowManager.defaultDisplay
            //設置高度
            //val height = display.height / 2
            val height = display.height / 3* 2
            mBottomSheetBehavior!!.peekHeight = height
            parent.setBackgroundColor(Color.TRANSPARENT)
        }
    }




    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        //需要設置背景顏色
        binding = FragmentBottomTempletFixedBinding.inflate(layoutInflater)

        return binding.root
    }
}

  view布局需要設置背景顏色,不然為透明色

參考:https://blog.csdn.net/a1018875550/article/details/80954244

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM