본문 바로가기
Android프로그래밍/오늘의 공부

[Android] 메뉴 생성하기

by 둥둥동동# 2022. 5. 2.
728x90

 

개요

 

Android에서 메뉴를 정의하는 방법에는 두가지가 있습니다.

XML에서 정의한 메뉴를 클래스에서 inflate하는 방법,

클래스에서 직접 메뉴객체를 생성하는 방법이 있습니다

 

 

XML에서 정의하기

 

메뉴를 구성하는 XML태그는 아래와 같습니다

태그 설명
<menu> item, group을 묶어 컨테이너로서 메뉴를 관리합니다
<item> 메뉴를 구성하는 하나의 항목입니다
<group> <item>요소를 투명 컨테이너로 묶어 관리할 수 있습니다

 

1. res에서 menu XML파일을 생성해 줍니다

 

저는 menu디렉토리를 만들어 XML을 생성했습니다

 

 

2. <item>태그를 추가해 줍니다. 

처음에는 <menu>태그로만 구성되어 있을텐데 저는 아래와 같이 두가지 요소로 추가했습니다

 

 

3. 관련 메서드를 오버라이드 합니다

 

-onCreateOptionsMenu()

액티비티가 시작될 때 한번만 호출되며 메뉴를 초기설정할 때 사용됩니다

MenuInflatrer 객체를 생성하여 inflate()함수를 호출합니다

메뉴의 ID값과 Menu객체를 인자값으로 넣으면 됩니다

R.menu는 res디렉토리 밑 menu디렉토리를 가리키며 mymenu는 파일명입니다

 

1
2
3
4
5
6
@Override
    public boolean onCreateOptionsMenu(Menu menu) { //menu에서 XML로 정의한 메뉴 불러오기 
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.mymenu, menu);
        return super.onCreateOptionsMenu(menu);
    }
cs

 

-onOptionsItemSelected()

Menu의 Item이 선택되었을 때 호출됩니다

인자값으로 받은 item을 통해 어떤 item에 눌렸는지 확인할 수 있습니다

저는 switch문을 통해 item의 id값을 구별한 후 toast메세지를 띄우는 방식으로 구현했습니다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()){
 
            case R.id.mnuPlus:
                Toast.makeText(this,"PLUs PLUS PLUS", Toast.LENGTH_SHORT);
                return true;
 
            case R.id.mnuMinus:
                Toast.makeText(this,"Minus Minus", Toast.LENGTH_SHORT);
                return true;
 
            default:
                return super.onOptionsItemSelected(item);
        }
    }
cs

 

 

 

 

클래스에서 정의하기

 

위와 동일한 메서드를 오버라이드 합니다

 

 

onCreateOptionsMenu()

전달받은 Menu객체에 item을 add()합니다

add()메서드는 지정할 그룹ID, item의 ID, Item의 타이틀을 인자로 갖습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @Override
    public boolean onCreateOptionsMenu(Menu menu) { 
        super.onCreateOptionsMenu(menu);
 
        MenuItem item1 = menu.add(010"전화기");
        item1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        item1.setIcon(R.drawable.ic_tel);
 
        MenuItem item2 = menu.add(0,2,0,"더하기");
        item2.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        item2.setIcon(R.drawable.ic_plus);
 
        return true;
    }
cs

 

-onOptionsItemSelected()

Item의 id로 구분해 동작합니다

XML 방식과 다르지 않습니다

1
2
3
4
5
6
7
8
9
10
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case 1:
                Toast.makeText(this,"전화기입니다", Toast.LENGTH_SHORT).show();
            case 2:
                Toast.makeText(this,"Plus Plus", Toast.LENGTH_SHORT).show();
            default:
                return super.onOptionsItemSelected(item);
        }
cs

 

 

 

 

다음

 

Context메뉴, 액션 등

 

728x90

댓글