안녕하세요 골드입니다.
오늘은 안드로이드에서 많이 사용하는 App Bar 메뉴에 대해서 간단하게 글을 써보도록 하겠습니다.
Appbar 메뉴는 오른쪽에 보이는 new버튼과 ... 버튼입니다.
다양한 메뉴를 Appbar 위에 놓을 수 있고,
메뉴가 너무 많으면 점점점 버튼에 넣어놓고 눌렀을 경우 팝업으로 보여줄 수 있습니다.
시작하기 전에 해야할 일이 있습니다.
먼저 AndroidManifest.xml에서 <application> 태그 안에
theme를 NoActionBar로 설정해주기 바랍니다.
1. activity_main xml 파일
액션바를 지웠습니다.
그 자리에 새로운 툴바를 만들기 위해 툴바를 생성합니다.
툴바를 사용할땐 빨란 에러가 생길 수 있습니다.
수직 방향에 대한 속성을 설정해달라는 말인데요,
저는 그래서 LinearLayout을 선언했습니다.
2. Menu.xml 파일 만들기
메뉴에 대한 xml을 새로 만들어 줘야합니다.
res/menu 폴더에 xml파일을 추가해야 하기 때문에
먼저 menu 폴더를 만들겠습니다.
이 폴더 안에 xml파일을 만들겠습니다.
저는 이름을 memo_menu라고 짓겠습니다.
menu.xml 을 만들었다면 최상위 레이아웃은 반드시 <menu>여야 합니다.
<menu> 안에 View는 두 가지가 올 수 있습니다.
<item>은 메뉴 아이템을 나타내기 위한 View입니다.
<group>이라는 View가 올 수 있는데 <group>은 <item>들을 그루핑하고 속성을 공유할 수 있도록 도와줍니다.
app:showAsAction라는 속성으로 AppBar에 내놓을지 점점점 안에 숨길지를 정할 수 있습니다.
always와 never는 무조건 꺼내고 숨기고 속성이고,
ifRoom이라는 속성은 만약 Appbar에 자리가 있으면 보여주는 속성입니다.
icon파일이 없을 경우
drawable 폴더에서
New -> Image Asset에서 icon을 만들 수 있습니다.
Asset Type을 clip Art로 바꾼다면
구글에서 기본으로 제공하는 icon을 사용할 수 있습니다.
3.MainActivity.class 파일 작성
Toolbar를 참조해주고 ActionBar를 Toolbar로 지정해줍니다.
(Toolbar는 androidX Toolbar입니다.)
앱이 죽는다면 Manifest에서 noActionBar를 지정하지 않았을 가능성이 높습니다.
onCreateOptionsMenu를 오버라이드해서
방금 만든 memo_menu.xml 파일을 inflate해주면 되겠습니다.
플레이 해보면
제 눈에는 디자인도 좋아 보입니다.
이렇게 메뉴를 만들었습니다.
이제 각 메뉴 버튼을 눌렀을 경우를 만들겠습니다.
이번에는 onOptionsItemSelected를 오버라이드합니다.
이런 경우는 switch문을 사용하는게 보기 좋습니다.
생성한 menu.xml의 item들을 참조하고 각 case에 원하는 작업을 작성합니다.
default문에서 super클래스를 참조합니다.
여기까지 골드였습니다.
감사합니다.
참고자료 : https://developer.android.com/guide/topics/ui/menus?hl=ko#java
https://developer.android.com/training/appbar/actions?hl=ko
'Mobile > Android(Java)' 카테고리의 다른 글
[Android/java] AlertDialog.Builder를 통한 Custom Dialog 만들기 (0) | 2020.03.14 |
---|---|
[Android/java] RecyclerView를 활용하여 ListView 만들기 (0) | 2020.03.06 |
[Android/java] Retrofit2를 이용한 JSON 데이터 HTTP 통신(GET, POST) 방법 (CLEARTEXT 오류 해결) (0) | 2020.03.01 |
[Android/java] TabLayout과 ViewPager 안에 Fragment 사용하기 (2) | 2020.02.25 |
[Android/java] MotionLayout 예제(touch and drag horizontally) 따라하기 (0) | 2020.02.24 |