250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 막내의 막무가내
- 막내의막무가내 플러터
- 안드로이드 sunflower
- 막내의막무가내 프로그래밍
- 막내의 막무가내 알고리즘
- 부스트코스에이스
- 막내의막무가내 플러터 flutter
- 프로그래머스 알고리즘
- 부스트코스
- 주엽역 생활맥주
- 막내의막무가내 코볼 COBOL
- flutter network call
- 막무가내
- 막내의막무가내 코틀린
- 안드로이드 Sunflower 스터디
- 프래그먼트
- 주택가 잠실새내
- 막내의막무가내
- Fragment
- 막내의막무가내 일상
- 안드로이드
- 막내의막무가내 코틀린 안드로이드
- 2022년 6월 일상
- 막내의막무가내 알고리즘
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 목표 및 회고
- 막내의막무가내 rxjava
- 막내의막무가내 SQL
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 안드로이드
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[안드로이드] Jetpack Navigation Fragment 전환시 BottomNavigationView 숨기는 방법 본문
안드로이드/코틀린 & 아키텍처 & Recent
[안드로이드] Jetpack Navigation Fragment 전환시 BottomNavigationView 숨기는 방법
막무가내막내 2020. 6. 27. 00:58728x90
[2021-04-13 업데이트]
Jetpack 바텀네비게이션 뷰를 프래그먼트 아이디를 통해 Visbility를 컨트롤할 수 있는 방법에 대해 포스팅하려고 합니다. ㅎㅎ
보통 앱은 기본적으로 하나의 액티비티 안에 바텀네비게이션과 그 바텀 버튼에 해당하는 프래그먼트로 이루어져 있는 경우가 많습니다.
그리고 이 네비게이션에 해당하는 프래그먼트들에서 상세화면으로 가는 버튼을 누른다고 가정하면 Jetpack Navigation 기능을 사용해 다른 프래그먼트으로 이동할 수 도 있습니다.
이때 바텀네비게이션과 종속되어 있는 메인화면이 아닌 상세화면에서 프래그먼트는 바텀 네비게이션이 불필요할겁니다.
이것을 컨트롤하기위한 방법을 Jetpack Navigation 다음 문서에서 확인할 수 있었습니다.
https://developer.android.com/guide/navigation/navigation-ui
이 문서를 참고하여 다음과 같이 OnDestinationChangedListener 를 통해 구현할 수 있었습니다.
바텀네비게이션에 해당하는 프래그먼트 아이디냐에 따라 바텀네비뷰를 조정했습니다.
class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initNavigation()
getHashKey()
// val tmapview = TMapView(this)
// tmapview.setSKTMapApiKey(getString(R.string.tmap_key))
//
// val linearLayoutTmap = findViewById<LinearLayout>(R.id.linearLayoutTmap)
// val tMapView = TMapView(this)
//
// tMapView.setSKTMapApiKey(getString(R.string.tmap_key))
// linearLayoutTmap.addView(tMapView)
}
private fun initNavigation() {
val navController = findNavController(R.id.main_nav_host)
binding.mainBottomNavigation.setupWithNavController(navController)
binding.mainBottomNavigation.itemIconTintList = null
navController.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.bottom_nav_1 || destination.id == R.id.bottom_nav_2 || destination.id == R.id.bottom_nav_3 || destination.id == R.id.bottom_nav_4) {
binding.mainBottomNavigation.visibility = View.VISIBLE
} else {
binding.mainBottomNavigation.visibility = View.GONE
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".views.MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/main_fcv_container"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/main_bottom_navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<fragment
android:id="@+id/main_nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/bottom_nav_graph" />
</androidx.fragment.app.FragmentContainerView>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/main_bottom_navigation"
android:layout_width="match_parent"
android:layout_height="54dp"
android:background="@color/colorWhite"
android:paddingStart="18dp"
android:paddingLeft="18dp"
android:paddingEnd="18dp"
android:paddingRight="18dp"
app:itemIconSize="48dp"
app:labelVisibilityMode="unlabeled"
app:layout_behavior="tech.thdev.app.view.BottomNavigationBehavior"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/main_fcv_container"
app:menu="@menu/bottom_menu" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
처음에 이동시 바텀네비뷰를 직접 바꿔줘야하나 했는데 문서에서 Jetpack Navigation 에서 제공하는 방법이 있더라고요 ㅎㅎ
댓글과 공감은 큰 힘이 됩니다.
감사합니다.
728x90
'안드로이드 > 코틀린 & 아키텍처 & Recent' 카테고리의 다른 글
[안드로이드] 안드로이드 달력 라이브러리 (feat. CosmoCalendar) (20) | 2020.07.02 |
---|---|
[안드로이드] 안드로이드 ViewPager2 적용 (feat. Viewpager number indicator) (2) | 2020.06.30 |
[안드로이드] Jetpack Navigation Fragment to Fragment direction (젯팩 네비게이션 프래그먼트 화면 전환) + 값 주고받는 방법 (0) | 2020.06.26 |
[안드로이드] 안드로이드 BottomNavigationView icon 설정 해결 (8) | 2020.06.26 |
[안드로이드] 안드로이드 카카오톡 로그인 구현 및 MVVM 적용 (feat. SingleLiveEvent) (0) | 2020.06.22 |
Comments