옵션 메뉴
타이틀 부분에 메뉴가 보이도록 하고 싶다면 먼저 메뉴를 정의해야 합니다.
메뉴는 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 레이아웃을 만든 후에 그 레이아웃을 그대로 액션바에 보여줄 수도 있습니다.
최근댓글