반응형

자동으로 만들어지는 화면의 위쪽에는 타이틀이 보입니다.

이 타이틀 부분을 액션바라고 부르는데 타이틀 글자 이외에도 메뉴가 표시될 수 있습니다.

메뉴를 쉽게 넣을 수 있도록 옵션메뉴라는 것이 제공되며 이런 메뉴 외에도 이미지나 뷰를 액션바에 넣을 수 있습니다.

때로는 액션바를 보이지 않도록 만드는 경우도 있고 액션바에 여러 가지 기능을 넣는 경우도 있는 거죠.

액션바를 어떻게 만들 수 있는지 알아봅시다.



옵션 메뉴

타이틀 부분에 메뉴가 보이도록 하고 싶다면 먼저 메뉴를 정의해야 합니다.

메뉴는 XML과 JAVA소스코드로 정의할 수 있습니다.

/res/menu 폴더를 만들고 그 안에 XML 파일을 넣으면 그 파일은 메뉴 파일로 인식됩니다.

메뉴를 위한 XML 파일에는 <menu> 태그를 넣을 수 있으며 그 안에 <item> 태그가 들어갑니다.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/menu_refresh"
        android:title="새로고침"
        android:icon="@drawable/menu_refresh"
        app:showAsAction="always" />

</menu>

<item> 태그에는 여러 가지 속성이 들어갈 수 있는데, id 속성은 메뉴를 구분하는 데 사용되며 title은 글자를 보여줄 때, icon은 이미지를 설정할 때 사용됩니다.

showAsAction 메뉴는 안드로이드 SDK에 포함된 속성이 아니라 외부 라이브러리(appcompat-v7)에 포함된 속성이라서 android: 접두어가 아닌 app: 접두어를 붙여줍니다.

이 속성의 값을 always로 하면 화면 상단의 타이틀 부분에 메뉴 아이콘이 항상 보이게 됩니다.

다른 속성 값으로는 never(절대로 액션바에 표시하지 않음), ifRoom(표시할 수 있는 공간이 존재하면 표시), withText(메뉴의 아이콘과 텍스트를 같이 표시)가 있습니다.

이렇게 만든 메뉴 XML은 액티비티 화면의 onCreateOptionsMenu 메소드 안에서 인플레이션됩니다.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

이 메소드는 자동으로 호출되며 그 안에서 R.menu.menu_main 을 인플레이션하여 객체로 만든 후 Menu 객체에 설정합니다.

이렇게 화면에 설정한 메뉴를 사용자가 선택하면 onOptionsItemSelected 메소드가 호출됩니다.

이 메소드가 호출되면 MenuItem 객체를 파라미터로 전달받게 되며 어떤 메뉴를 선택했는지를 id로 구분하여 처리할 수 있습니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int curId = item.getItemId();
    switch(curId) {
      case R.id.menu_refresh:
         Toast.makeText(this, "새로고침 메뉴가 선택되었습니다.", Toast.LENGTH_SHORT).show();
         break;

         중략…

 

액션바

액션바는 액티비티의 스타일에 따라 자동으로 만들어집니다.

디폴트 값은 액션바가 있는 스타일이지만 매니페스트 파일 안에 <activity> 태그를 추가할 때 다른 스타일을 지정하면 액션바가 없앨 수도 있습니다.

액션바는 소스 코드에서 접근할 수 있으며 getActionBar 메소드를 호출하면 참조할 수 있습니다.

show 메소드를 호출하면 액션바가 보이고 hide 메소드를 호출하면 액션바가 보이지 않게 됩니다.

ActionBar abar = getActionBar();
abar.show();
abar.hide();

타이틀 왼쪽에 로고 이미지를 보여줄 수도 있고 XML 레이아웃을 만든 후에 그 레이아웃을 그대로 액션바에 보여줄 수도 있습니다.

액션바의 디스플레이 옵션으로 설정할 수 있는 상수들


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기