[Android] 특정 Fragment 에서 AppBar 없애는 법

Happy Jiwon·2023년 7월 16일
1

Android

목록 보기
9/13
post-thumbnail

프로젝트를 진행하다보면 Action Bar를 숨기는 경우가 있는데, 이때 모든 액티비티(Fragment)에서 보이지 않게 하는 방법도 있지만 특정 페이지에만 App bar를 없애고 간단한 Toolbar를 사용하고 싶었다. 예를 들어 새로운 장소를 추가할 때, 로그인할 때... 등등 ..

이외에는 기본적으로 제공하는 ActionBar 형태 대신 별도의 Toolbar를 사용하고싶었다.


기본 ActionBar를 특정 fragment에서 없애는건 간단하다.

바로 숨기기이다. (?!?!)

Fragment 생명주기를 보면 onStart(), 와 onStop() 이 있다.

onStart()

Fragment 가 사용자에게 보여질 수 있을 때 호출되는 곳으로 주로 Fragment가 attach 되어있는 Activity의 onStart() 시점과 유사하다.

이 시점부터는 Fragment 의 childFragmentManager를 통해 FragmentTransaction 을 안전하게 수행할 수 있다.

onStop()

Fragment 가 더이상 화면에 보여지지 않게 되면 Fragment 와 View 의 Lifecycle 은 CREATED 상태가 되고, onStop() 콜백 함수가 호출되게 된다.

이 상태는 부모 액티비티나 프래그먼트가 중단됐을 때 뿐만 아니라, 부모 액티비티나 프래그먼트의 상태가 저장될 때도 호출된다.


방법 1

자 이제 Fragment가 사용자에게 보여질 때 숨기고, 보이지 않게 되면 중단되는 것을 실행해보자!!

override fun onStart() {
    super.onStart()
    (activity as AppCompatActivity?)!!.supportActionBar!!.hide()
}

override fun onStop() {
    super.onStop()
    (activity as AppCompatActivity?)!!.supportActionBar!!.show()
}

방법 2

🖐🏻 여기서 잠깐
나는 NavHostFragment 로 fragment 를 정의했기 때문에 navController를 사용해서 hide()를 해보겠다.

// bottom navigation 탐색 설정
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_container);
NavController navController = navHostFragment.getNavController();
BottomNavigationView bottomNav = findViewById(R.id.bottom_nav_view);
NavigationUI.setupWithNavController(bottomNav, navController);

// hide()
navController.addOnDestinationChangedListener((navController1, navDestination, bundle) -> {
	if (navDestination.getId() == R.id.navigation_add_place) {
		getSupportActionBar().hide();
	} else {
		getSupportActionBar().show();
	}
});

navDestination.getId() 로 navigation ID를 구별하여 특정 destination으로 이동시 ActionBar를 hide 하게끔 처리하면 화면 전환시, ActionBar가 보였다 사라지는 현상없이 깔끔하게 처리되는걸 볼 수 있다.

profile
공부가 조은 안드로이드 개발자

0개의 댓글