티스토리 뷰
안드로이드는 메뉴 버튼을 배치하고 이를 터치했을 때 메뉴가 보이도록 할 수 있다. 이런 방식의 메뉴를 옵션 메뉴라고 하며, 화면를 길게 눌렀을 때 팝업 형태로 나타나는 메뉴를 컨텍스트 메뉴라고 한다.
옵션 메뉴와 컨텍스트 메뉴는 각각 아래의 메서드들을 사용하여 액티비티에 추가할 수 있다.
boolean onCreateOptionsMenu(Menu menu)
void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo info)
또한 전달되는 Menu와 ContextMenu객체가 가지고 있는 add 메서드로 메뉴 아이템을 액티비티 코드에서 추가할 수도 있다.
메뉴를 위한 레이아웃 파일은 반드시 app/res/menu 디렉토리를 생성한 뒤에 그 내부에 추가하여야 안드로이드 내에서 해당 레이아웃이 메뉴임을 인식한다.
◎app/res/menu/menu_main.xml
<?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">
<item android:title="refresh"
android:id="@+id/menu_refresh"
app:showAsAction="always"
android:icon="@android:drawable/ic_menu_rotate"/>
<item android:title="search"
android:id="@+id/menu_search"
app:showAsAction="always"
android:icon="@android:drawable/ic_menu_search"/>
<item android:title="settings"
android:id="@+id/menu_settings"
app:showAsAction="always"
android:icon="@android:drawable/ic_menu_manage"/>
</menu>
showAsAction 속성은 메뉴를 상단바에 노출시킬건지를 묻는 속성 값이며, 설정할 수 있는 값은 다음과 같다.
속성 값 | 설명 |
always | 항상 액션바에 아이템을 추가하여 표시한다. |
never | 액션바에 아이템을 추가하여 표시하지 않는다. (default) |
ifRoom | 액션바에 여유 공간이 있을 때만 아이템을 표시한다. |
withText | title 속성으로 설정된 제목을 같이 표시한다. |
collapseActionView | 아이템에 설정한 뷰의 아이콘만 표시한다. |
이후에 fragment와 마찬가지로 메인 액티비티에서 menu 레이아웃을 액티비티 메모리에 로드하기 위해 inflate 한 뒤, 아래와 같이 각 메뉴가 선택되었을 때 동작할 수 있도록 onOptionItemSelected() 메서드를 작성한다.
◎MainActivity.java
package com.example.menu_ex;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int curID = item.getItemId();
switch(curID) {
case R.id.menu_refresh:
Toast.makeText(this, "새로고침 메뉴가 선택되었습니다.", Toast.LENGTH_LONG).show();
break;
case R.id.menu_search:
Toast.makeText(this, "검색 메뉴가 선택되었습니다.", Toast.LENGTH_LONG).show();
break;
case R.id.menu_settings:
Toast.makeText(this, "설정 메뉴가 선택되었습니다.", Toast.LENGTH_LONG).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
실행해보면, 다음과 같이 메뉴를 클릭하였을 때 토스트 메시지가 잘 동작한다.
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Tab 1: Tab 이해하기, 상단 Tab 구성 (0) | 2022.03.24 |
---|---|
[Android] Action Bar 2: 액션바에 View 삽입 (0) | 2022.03.23 |
[Android] 화면 간 전환 7: Fragment로 화면 만들기 (0) | 2022.03.22 |
[Android] 화면 간 전환 6: Fragment 이해하기 (0) | 2022.03.21 |
[Android] 화면 간 전환 5: 액티비티의 생명 주기 (0) | 2022.03.20 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- await
- redux-thunk
- javascript
- react-native
- AsyncStorage
- 정보보안기사 #실기 #정리
- Promise
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- 파니노구스토
- Async
- react
- redux
- 인천 구월동 맛집
- 맛집
- Total
- Today
- Yesterday