전에는 바텀시트를 사용하는 액티비티 안에서 레이아웃을 만들고, 이 레이아웃을 coordinatorLayout으로 감싸고, 레이아웃에
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
이런 설정을 추가해서 만들었었다.
하지만 이는 의존성이 너무 높아져서 재사용이 불가능하다는 단점이 있다.
그래서 Dialog형식의 바텀시트를 만들어보려고 한다.
class BottomSheetFragment(val mContext : Context) : BottomSheetDialogFragment() {
private var _binding: FragmentGameStatusBottomSheetDialogBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentGameStatusBottomSheetDialogBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
주의할건 없고, 프래그먼트를 상속받는것이 아닌 BottomSheetDialogFragment()를 상속받아야 한다.
여기는 뭐 없다. 그냥 바텀시트에 넣고싶은 형식으로 위젯들을 넣어주면 된다.
먼저 전역변수로 Context를 호출해준다.
private lateinit var mContext: Context
그 후에 호출해주면 되는데 아래에서는 btnTest 버튼 클릭시 해당 바텀시트를 호출해줬다.
binding.btnTest.setOnClickListener {
mContext = this.requireContext()
val gateStatusBottomSheet = GameStatusBottomSheetDialogFragment(mContext)
gateStatusBottomSheet.show(requireActivity().supportFragmentManager, gateStatusBottomSheet.tag)
}
requireActivity().supportFragmentManager 대신 childFragmentManager도 가능하다.
바텀시트
bottomsheet
bottom_sheet