본문 바로가기
Android 개발/Android UI

안드로이드 ActionBar에 Menu 를 구현해보자

by Developer88 2017. 3. 2.
반응형

안드로이드 우측 상단에 보면 아이콘과 점3개로 되어있는 아이콘이 있는 UI를 본적이 있으실 텐데요.

오늘은 이것에 대해서 정리해 보도록 하겠습니다.


실제로 만들 화면은 아래와 같은데요.

우측 상단의 디스켓 아이콘과 점점점으로 된 아이콘이 저희가 만들어 볼 Action Button들이구요, 

그 중 점점점으로 된것이 overflow menu Button입니다.



그럼 하나하나 구현해보도록 하겠습니다.



1. 메뉴 XML파일 생성


먼저, 해야할 일은 xml을 만들고, menu화면을 정의하는 일인데요.

res폴더에서 new> android resource file을 선택해줍니다.




menu_sample 로 file name을 정하고, ResourceType을 menu로 선택해줍니다. 




2. XML파일 생성


XML파일에서 각 메뉴들을 <item>으로 정의해 주어야 합니다.

안드로이드에서는 이 아이템들을 Action Button 이라고 부르는데요. 


만약 overflow메뉴로 점점점으로 보이고 싶으면 아래와 같이 app:showAsAction 속성을 never로 해서 절대 보이지 않도록 설정해줘야합니다.

참고로, showAsAction을 always로 하면 항상 ActionBar에 메뉴가 보인다는 것이구요,

ifRoom으로 한다면, 공간이 있으면 보이고, 없으면 보이지 말라는 것입니다.

따라서, ifRoom이라면, 공간이 없으면 ...안에 들어가 있을 것이고, 있으면 밖으로 나와있게 됩니다.

>> app:showAsAction="never"




3. Java파일 구현


Java파일의 onCreateOptionsMenu의 xml에서 정의한 요소들을 실제 뷰로 inflate시켜줍니다.



메뉴들이 만들어 졌으니, 해당 메뉴들을 누르면 어떤 행동을 할지를 정의해 주어야 하는데요.

앱바의 아이템들을 누르면 안드로이드의 시스템이이 onOptionsItemSelected를 호출해주구요.

바로 여기에서 인자로 받아온 item을 이용해서, action들을 정의해주면 됩니다.



다 구현이 된 이미지는 아래와 같은데요. 맨 우측의 점점점인 overflow메뉴 버튼을 눌러보면 아래와 같이 팝업 메뉴를 볼 수 있구요.

클릭하면 위에서 정의한 대로, 토스트 메시지를 볼 수 있습니다.




4. Fragment에서의 구현


위에서 Activity에서 구현하는 방법에 대해 정리하였는데요.

추가적으로 Fragment에서 구현하는 방법도 추가해보겠습니다.

프래그먼트에서는 onCreateOptionsMenu 에 인자로 inflater를 주기 때문에,

getMenuInflator로 얻어올 필요가 없어서 바로 inflate시키면 되구요.

나머지 구현사항은 Activity와 같습니다.


다만 한가지 추가할 점이 있는데요.

OnCreate에서, 아래와 같이, setHasOptionsMenu(True)로,

Fragment에 메뉴가 있다고 알려주어야 합니다.


이렇게 하면, 개별 Fragment에서도 메뉴들을 보여줄 수 있습니다.


728x90

댓글