액션바는 앱의 현재 컨텍스트와 관련된 중요한 액션 아이템들에 대해 버튼을 추가 할 수 있습니다. 아이콘 과/또는 텍스트로 액션바에 바로 보여지는 것들은 액션버튼들 입니다. 액션바에 딱 맞지 않던가 그렇게 중요하지 않는 액션들은 액션바의 액션 오버플로어(Action Overflow)에 숨깁니다.
그림 1. 검색에 대한 하나의 액션 버튼과 보이지 않는 액션들이 추가된 액션 오버플로우(Action overflow)를 가지고 있는 액션바.
XML 에서 액션들 명시하기
-------------------------------
모든 액션버튼들과 액션 오버플로우(Action overflow)에서 사용할 수 있는 다른 액션들은 XML Menu resources 에 정의되어 있습니다. 액션바에 포함되길 원하는 각각의 아이템을 <item>요소로 추가합니다.
res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" android:showAsAction="ifRoom" /> <!-- Settings, should always be in the overflow --> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:showAsAction="never" /> </menu> |
검색(Search) 액션은 액션바(Action Bar)안에 공간(room)이 있을 때 액션버튼이 보이도록 선언합니다. 하지만 Setting 액션은 항상 오버플로우(overflow)안에서 만 나타나도록 합니다. (기본적으로, 모든 액션들은 오버플로우(overflow)에 나타나도록 되어 있지만 각각의 액션들에 대해 여러분의 디자인 의도를 직접적으로 명시하는 것이 좋은 습관입니다.)
android:icon 속성은 이미지의 리소스 ID 를 요구합니다. ID의 이름은 반드시 @drawble/ 다음에 여러분이 프로젝트의 res/drawable 디렉토리에 저장해 놓은 비트맵(bitmap) 의 이름이어야 합니다. 예를 들어, ic_action_search.png 를 참조하기 위해"@/drawable/ic_action_search"를 사용합니다. 마치 이전 포스트인 " 간단한 UI 만들기 "에서 소개되었던 title 속성에 사용할 문자열 리소스를 XML에서 res/values/ 디렉토리을 이용하여 정의했던 것과 같습니다.
Note: 여러분의 앱에서 아이콘들과 다른 비트맵(bitmap) 이미지를 만들 때는 해상도가 다른 화면에 대해 각각 최적화 되어 있는 여러 버전을 제공하는 것은 중요합니다. 이 내용은 나중에 Support Different Screens(다른 화면해상도 지원하기) 파트에서 좀더 소개 하겠습니다.
액션바 아이콘들 Download 개발자 사이트의 iconography 가이드에 잘 맞추기 위해 여러분들은 Action Bar Icon Pack 안에 제공된 것을 사용하시기 바랍니다. |
만약 여러분의 앱이 Android 2.1로서 낮은 버전이고 이를 지원하고 호환하기 위해 Support Library 를 사용한다면, showAsAction 속성은 android: 네임스페이스를 사용할 수 없습니다. 대신 여러분은 이 속성의 접두어로 Support Library에 의해 제공되며, 여러분 본인이 가지고 있는 XML 네임스페이스를 사용해야 합니다.(사용자 정의 XML 네임 스페이스는 앱의 이름을 기반으로 해야 합니다. 하지만 여러분이 원하고 오직 선언된 파일의 범위 내에서만 접근할 수 있는 이름 이어도 됩니다.) 예를들어,
res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" yourapp:showAsAction="ifRoom" /> ... </menu> |
액션 버튼들에 반응하기
------------------------
사용자가 액션버튼들 중 하나 또는 액션 오버플러우(overflow) 안에 있는 아이템 중 하나를 눌렀을 때 시스템은 자동으로onOptionsItemSelected() 콜백 메소드를 호출합니다. 여러분은 이 메소드 안에, 눌려진 item으로부터 리턴된 ID가 여러분들이 <item> 요소의 android:id 속성에 선언한 값과 일치하는지 확인하기 위해 매개변수로 주어진 MenuItem의 getItemId() 메소드를 호출합니다.
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_settings: openSettings(); return true; default: return super.onOptionsItemSelected(item); } } |
하위 단계 액티비티들에 대해 Up 버튼 추가하기
-----------------------------------------------------
여러분의 앱안에 있는 모든 화면들이 앱의 메인 진입화면이 아닐겁니다( "home" 화면이 아닌 액티비티들). 이 앱들은 사용자에게 액션바안에 있는 Up 버튼을 사용하여 앱의 상속구조 안에서 논리적 부모화면(상위화면)에 갈 수 있는 방법이 제공 되어야만 합니다.
그림 4. Gmail 에 있는 Up 버튼
Android 4.1(API level 16) 이상에서 실행하거나 또는 Support Library로 부터 ActionBarActivity를 사용하여 실행할 때, Up 버튼은 간단하게 여러분들이 manifest 파일안에 부모 액티비티를 선언하고 Up 버튼을 사용하게 하면 됩니다.
예를 들어, 메니페스트 안에 액티비티의 부모를 선언하는 방법을 보여드리겠습니다.
<application ... > ... <!-- The main/home activity (it has no parent activity) --> <activity android:name="com.example.myfirstapp.MainActivity" ...> ... </activity> <!-- A child of the main activity --> <activity android:name="com.example.myfirstapp.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application> |
그리고 나서 setDisplayHomeAsUpEnabled() 메소드를 호출함으로서 앱 icon 을 Up 버튼으로 사용할 수 있도록 합니다.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_displaymessage); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // If your minSdkVersion is 11 or higher, instead use: // getActionBar().setDisplayHomeAsUpEnabled(true); } |
시스템은 MainActivity 가 DisplayMessageActivity 의 부모임을 알고 있기 때문에 사용자가 Up 버튼을 눌렀을때, 여러분이 특별하게 Up버튼의 이벤트를 처리하지 않더라도 자동으로 적절한 부모 액티비티 화면으로 안내합니다.
up 버튼의 네비게이션에 대해 추가적인 정보를 원하시면, 개발자 사이트의 Providing Up Navigation 을 참고하세요.
'Android 개발자사이트 튜토리얼' 카테고리의 다른 글
액션바(Action Bar) 꾸미기 2 (0) | 2015.03.27 |
---|---|
액션바(Action Bar) 꾸미기 1 (0) | 2015.03.27 |
Action Bar 만들기 (0) | 2015.03.27 |
Action Bar(액션바) 추가하기 (0) | 2015.03.27 |
다른 액티비티 실행하기 2 (0) | 2015.03.27 |