Toolbar는 안드로이드 5.0부터 추가된 Widget으로, App에서 가장 중요한 Action 또는 가장 자주 사용되는 Action들을 제공하는 AppBar를 만들 때 사용한다. 예전엔 AppBar를 ActionBar라고 부르기도 했었다고 한다. 지금까지 많은 곳에서 AppBar와 ActionBar바를 혼용해서 사용한다.
보라색 부분이 AppBar 혹은 Toolbar이다.
새로운 버전의 안드로이드가 배포됨에 따라 AppBar에 여러 기능이 추가되었고, 시각적인 부분도 많이 바뀌었다. 이로 인해 버전에 따라 AppBar가 다르게 동작하는 Issue가 생겼고, 이러한 단점을 보완하고 하위 호환성을 제공하기 위해 Support Library를 사용하기 시작했다.
AppBar의 여러 기능은 v7 AppCompat 지원 라이브러리(현재는 androidx.appcompat.widget을 통해 사용할 수 있다)의 Toolbar Widget으로 구현되었고 하위 호환성을 확보할 필요가 있다면 Toolbar를 사용하여 App Bar를 구현해야 한다. AppBar 대신 ToolBar를 사용하는 방법을 알아보자.
AppBar는 Activity 내부에 기본적으로 포함된 요소로, Activity 의 Layout xml에 AppBar를 추가하지 않아도 Activity에 지정된 테마가 App Bar를 지원하면 App Bar가 Activity의 App Bar로 사용된다. 하지만 ToolBar는 xml에 작성되는 여러 View 들과 같은 수준으로 취급되기 때문에 몇 가지 코드를 통해 이 문제를 해결해야 한다.
Activity에서 기본으로 제공되는 ActionBar를 사용하지 않게 만들기 위해 AndroidManifest.xml 파일의 activity 태그에 있는 android:theme 끝에 .NoActionBar를 추가해 ActionBar를 사용하지 않게 해야 한다.
사용할 준비가 끝났으면 xml 파일에 ToolBar를 추가해준 후 java 파일에서 setSupportActionBar()를 쓰면 된다.
< xml 파일에 ToolBar 추가>
<java 파일에서 setSupportActionBar()> - binding을 사용했다.
지금까지는 intent를 이용한 Activity 전환으로 화면 전환을 구현했다. 그러나 App을 만들다 보면 화면 전체 전환이 아닌 부분 전환이 필요할 때가 있다. 이럴 때 사용할 수 있는 것이 Fragment이다. Fragment는 부분 화면을 전환할 수 있는 기능으로 Activity와 비슷한 구조와 특징을 갖고 있다.
Activity 간 이동은 Intent를 통해 이동하듯이, Fragment는 Fragment Manager를 통해 이동한다. 이때 Fragment는 Activity 위에서 동작하기 때문에 Intent가 아닌 함수 호출을 통해 이동하게 된다.
예제 프로그램을 작성해보자. Button 두 개가 있고, 각 Button을 누르면 다른 Fragment가 나오는 프로그램을 만들 것이다.
activity_main.xml에 Button을 두 개 추가하고 FrameLayout을 하나 추가해 주자.
<activity_main.xml>
fragment_a.xml, fragment_b.xml을 만들어 주자. 구분하기 쉽게 android:background를 이용하도록 한다.
<fragment_a.xml>
<fragment_b.xml>
Fragment들을 만들었으면 각각의 java 파일을 만들어 주어야 한다. Fragment를 상속받는 FragmentA.java, FragmentB.java 파일을 만들어 주자.
<FragmentA.java>
<FragmentB.java>
xml 파일과 java 파일을 만들었으면 Fragment를 사용할 준비는 끝났다. 이제 MainActivity.java 를 작성해 보자.
Fragment를 통해 화면을 전환하기 위해서는 각 Fragment 클래스의 객체와 FragmentManeger, FragmentTransaction이 필요하다.
FragmentManeger, FragmentTransaction에 대해 알아보자
FragmentManager는 Activity와 Fragment의 중간에서 서로를 이어주는 역할을 하는 역할을 하는 클래스다.
FragmentTransaction은 Fragment의 추가/변경/삭제 기능을 제공하는 클래스다.
FragmentManager를 얻고 FragmentManager의 beginTransaction()함수를 통해 FragmentTransaction을 얻는다. FragmentTransaction의 replace()와 commit()을 통해 Fragment를 교체하고 적용할 수 있다. Button 2개에 OnClickListener를 추가하고 OnClickListener 내부에서 Fragment를 바꿔주면 된다.
**주의할 점은 이미 Fragment가 할당되고 commit 한 transaction에 다른 Fragment를 할당하고 commit 하면 Error가 발생하므로 FragmentManeger, FragmentTransaction를 새로 생성하며 관리해야 한다.
<MainActivity.java>
이렇게 하면 버튼을 누르면 Fragment 전환이 일어나는 프로그램이 완성된다.
'안드로이드' 카테고리의 다른 글
안드로이드 공부 기초 10(Navigation) (0) | 2023.01.25 |
---|---|
안드로이드 공부 기초 9(Layout의 속성) (0) | 2023.01.21 |
안드로이드 공부 기초 7(Binding) (0) | 2023.01.18 |
안드로이드 공부 기초 6(ListView) (0) | 2023.01.18 |
안드로이드 공부 기초 5(AndroidManifest.xml) (0) | 2023.01.18 |