개요
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(0, 1, 0, "전화기");
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메뉴, 액션 등
'Android프로그래밍 > 오늘의 공부' 카테고리의 다른 글
[Android]could not install Gradle distribution from 에러 해결방법 (0) | 2022.05.09 |
---|---|
[Android]PopUpMenu 생성하기 (0) | 2022.05.08 |
[Android] 대화상자(Alter Dialog) 띄우기 (0) | 2022.05.04 |
[Kotlin] findViewById 전역변수 선언시 오류의 원인 (0) | 2021.02.03 |
01. 안드로이드 View접근이 안될때 / view import가 안될때 (0) | 2020.12.23 |
댓글