Programming/Android
[Kotlin/Android] DrawerLayout 특정 화면에서 사용자 액션 막기(화면 스와이프) With navigation
생각하는로뎅
2020. 9. 2. 15:46
반응형
사용자가 특정 화면에서 손가락으로 화면을 스와이프했을때, DrawerLayout Open을 막고 싶을때 사용된다.
1. 소스
[Kotlin/Android] DrawerLayout 사용자 액션 막기(화면 스와이프)
1. 소스
private lateinit var drawerLayout: DrawerLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@Suppress("UNUSED_VARIABLE")
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
val navController = this.findNavController(R.id.myNavHostFragment)
// 액션바에 네비게이션 컨트롤러 등록
NavigationUI.setupActionBarWithNavController(this, navController)
drawerLayout = binding.drawerLayout
// 액션바에 drawer layout 뷰 추가
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
// 햄버거 메뉴를 누르면 반응할 뷰 추가
NavigationUI.setupWithNavController(binding.navView, navController)
// 네비게이션 화면 전환이 이루어졌을때 호출되는 리스너
navController.addOnDestinationChangedListener{
controller: NavController, destination: NavDestination, arguments: Bundle? ->
// destination.id : 현재 진입된 GRAPH ID (네비게이션에 추가된 화면 ID)
// controller.graph.startDestination : 네비게이션에 startDestination 으로 명시된 id
// 또는 destination.id == R.id.graph id (네비게이션에 추가된 화면 ID)
if (destination.id == controller.graph.startDestination) {
// 유저가 화면을 스와이프할때 메뉴가 열리도록 한다.
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
} else {
// 유저가 화면을 스와이프할때 메뉴가 열리지 않도록 한다.
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
}
}
2. 설명
1) addOnaddOnDestinationChangedListener 으로 화면 전환이 이루어졌을때, 진입한 그래프 ID로 비교해서 메뉴 오픈을 LOCK 또는 UNLOCK 한다.
2) controller.graph.startDestination 은 아래 네비게이션 xml 에서 찾아볼 수 있다.
반응형