【Kotlin】Navigation(AAC)와 UIComponent를 연계한다
기사를 이동했습니다.
htps : // 전. 에서 v/dd_쇼/아 rc c s/7d849 8889
앞으로는 위의 기사에서 업데이트하겠습니다. (2021/10/03)
NavigationUI
클래스를 사용하는 것으로 AAC의 Navigation과 후술하는 UIComponent를 간단하게 연계할 수 있으므로 비망록으로서 기사로 합니다.
공식 레퍼런스는 이쪽
NavigationUI 클래스란?
NavigationUI 클래스에는,Top App Bar
, Navigation Drawer
, Bottom Navigation
와 Navigation 을 연동하기 위한 메소드가 준비되어 있다.
Top App Bar
Navigation Drawer
Bottom Navigation
이미지는 공식 사이트의 것을 빌렸습니다.
머티리얼 디자인
Top App Bar와의 협력
할 수 있는 일
・뒤로 버튼(←)의 표시
・화면 천이시에 타이틀을 Navigation의 그래프로 각 화면에 설정한 label로 자동 갱신한다
연동 가능한 Top App Bar
Navigation 버튼의 동작을 관리하기 위해
AppBarConfiguration
클래스를 이용한다.기본적으로 Navigation 그래프에서 화면 전환의 첫 번째 화면에서는 Navigation 버튼이 표시되지 않습니다.
다른 화면으로 이동하면 뒤로 버튼이 표시됩니다.
다음과 같이 인스턴스를 생성한다.
val appBarConfiguration = AppBarConfiguration(navController.graph)
화면 전환의 첫 번째 화면을 지정하는 경우,
val appBarConfiguration = AppBarConfiguration(setOf(R.id.main, R.id.android))
ToolBar
Activity onCreate() 메서드 내에서
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
// ・・・
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
findViewById<Toolbar>(R.id.toolbar)
.setupWithNavController(navController, appBarConfiguration)
}
※ToolBar를 사용할 때는 Navigation이 자동으로 클릭 이벤트를 핸들하기 때문에
onSupportNavigateUp()을 재정의할 필요가 없습니다.
CollapsingToolbarLayout
Activity onCreate() 메서드 내에서
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
// ・・・
val layout = findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar_layout)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
layout.setupWithNavController(toolbar, navController, appBarConfiguration)
}
액션 바
①Activity의 onCreate() 메소드 내에서
private lateinit var appBarConfiguration: AppBarConfiguration
// ・・・
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
// ・・・
val navController = findNavController(R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}
②onSupportNavigateUp() 메소드를 오버라이드(override) 한다. (뒤로 버튼이 작동합니다)
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.nav_host_fragment)
return navController.navigateUp(appBarConfiguration) ||
super.onSupportNavigateUp()
}
MenuItem과 화면을 연결하기
①Navigation 그래프의 fragment에 할당하는 id와 묶는 MenuItem의 id를 일치시킨다.
②Activity의 onOptionsItemSelected()를 재정의하고 onNavDestinationSelected()를 호출한다.
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val navController = findNavController(R.id.nav_host_fragment)
return item.onNavDestinationSelected(navController) ||
super.onOptionsItemSelected(item)
}
Navigation Drawer와의 협력
Activity onCreate() 내에서,
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
// ・・・
val appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout)
val navController = findNavController(R.id.nav_host_fragment)
findViewById<NavigationView>(R.id.nav_view)
.setupWithNavController(navController)
}
※Top App Bar가 drawer 아이콘과 뒤로 버튼의 전환을 자동으로 해 주기 때문에 ActionBarDrawerToggle 클래스를 사용할 필요는 없다.
Bottom Navigation과의 연계
할 수 있는 일
Bottom 아이템이 선택되면 NavController는 onNavDestinationSelected()를 호출하여 자동으로 선택 상태를 갱신한다.
Activity onCreate() 내에서,
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
// ・・・
val navController = findNavController(R.id.nav_host_fragment)
findViewById<BottomNavigationView>(R.id.bottom_nav)
.setupWithNavController(navController)
}
이번 기사는 이상입니다.
Reference
이 문제에 관하여(【Kotlin】Navigation(AAC)와 UIComponent를 연계한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s_emoto/items/0530beacb1c145369bdb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)