1. 액션바 (ActionBar)
액션바는 액티비티의 스타일에 따라 자동으로 만들어진다.
디폴트 값은 액션바가 있는 스타일이지만, AndroidManifest.xml 안에 <activity> 태그를 추가할 때 다른 스타일을 지정할 수 있다.
액션바는 소스 코드에서 접근할 수 있으며 getActionBar, getSupportActionBar 메소드를 호출하면 참조할 수 있다.
show 메소드를 호출하면 액션바가 보이고 hide 메소드를 호출하면 액션바가 보이지 않게 된다.
2. 옵션메뉴 (OptionMenu)
옵선메뉴란, 액션바에 메뉴 버튼을 눌렀을 때 나타나는 메뉴를 말한다.
메뉴를 생성하려면 먼저 XML과 JAVA 소스코드를 통해 메뉴를 정의해야 한다.
/res/menu 폴더를 만들고 그 안에 XML 파일(메뉴 리소스 파일)을 넣으면 그 파일은 메뉴 파일로 인식된다.
메뉴를 위한 XML 파일에는 <menu> 태그를 넣을 수 있으며 그 안에 <item> 태그가 들어간다.
3. 실행 결과 화면
4. menu/menu_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0" encoding="utf-8"?> <menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- showAsAction 메뉴는 안드로이드 SDK 에 포함된 속성이 아니라 외부 라이브러리(appcompat-v7)에 포함된 속성이어서 android: 접두어가 아닌 app: 접두어를 붙인다. 이 속성의 값을 always 로 하면 화면 상단의 타이틀 부분에 메뉴 아이콘이 항상 보이게 된다. 다른 속성 값으로는 never (절대로 액션바에 표시하지 않음), ifRoom (표시할 수 있는 공간이 존재하면 표시), withText (메뉴의 아이콘과 텍스트를 같이 표시)가 있다. --> <item android:id="@+id/menu_refresh" android:title="새로고침" android:icon="@drawable/menu_refresh" app:showAsAction="always" /> <item android:id="@+id/menu_search" android:title="검색" android:icon="@drawable/menu_search" app:showAsAction="always|withText" app:actionLayout="@layout/menu_search"/> <item android:id="@+id/menu_settings" android:title="설정" android:icon="@drawable/menu_settings" app:showAsAction="always" /> </menu> | cs |
5. layout/menu_search.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="검색" android:textSize="18sp" android:textColor="@android:color/white" android:textStyle="bold"/> <EditText android:id="@+id/edit_text" android:layout_width="50dp" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:backgroundTint="@android:color/white"/> </LinearLayout> | cs |
6. MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package com.tistory.qlyh8.pracitice; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 액션바 숨기기 //ActionBar actionBar = getSupportActionBar(); //actionBar.hide(); } // 자동 호출되는 메서드로, // R.menu.menu_main 을 인플레이션하여 객체로 만든 후 Menu 객체에 설정한다. @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } // 메뉴 선택 시, onOptionsItemSelected 메소드가 호출된다. // 이 때 MenuItem 객체를 파라미터로 전달받게 되며, 어떤 메뉴를 선택했는지를 id로 구분하여 처리할 수 있다. @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu_refresh: Toast.makeText(getApplicationContext(), "새로고침 메뉴", Toast.LENGTH_SHORT).show(); break; case R.id.menu_search: Toast.makeText(getApplicationContext(), "검색 메뉴", Toast.LENGTH_SHORT).show(); break; case R.id.menu_settings: Toast.makeText(getApplicationContext(), "설정 메뉴", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onOptionsItemSelected(item); } } | cs |
7. 참고
- 메뉴: https://developer.android.com/guide/topics/ui/menus?hl=ko
- 앱 바 추가: https://developer.android.com/training/appbar/?hl=ko
- 지원 라이브러리: https://developer.android.com/topic/libraries/support-library/?hl=ko
- 지원 라이브러리 기능: https://developer.android.com/topic/libraries/support-library/features
- Menu Resource: https://developer.android.com/guide/topics/resources/menu-resource
출처: https://www.edwith.org/boostcourse-android/lecture/17076/
'Android' 카테고리의 다른 글
뷰페이저 (ViewPager) (0) | 2018.07.10 |
---|---|
탭 (Tab) (0) | 2018.07.05 |
프래그먼트 (Fragment) - 4. 인터페이스를 사용하여 다른 프래그먼트 호출하기 (1) | 2018.07.05 |
프래그먼트 (Fragment) - 3. 다른 프래그먼트 호출하기 & 수명주기 (1) | 2018.06.29 |
프래그먼트 (Fragment) - 2. java 소스코드에 프래그먼트 추가하기 (0) | 2018.06.29 |