먼저,
Menu xml으로 menu layout을 구성
main xml에는 아무작업X
mainActivity에서 menu layout 연결
onOptionsItemSelected ovrride로 menu기능 구현
menu directory가 android내부에서 menu로 인식함
따라서 directory명은 무조건 menu여야함
그러면 menu layout으로 자연스럽게 setting됨
으로 메뉴블락 추가
showsAction으로 아이콘을 어떻게 띄울지 결정
각 item의 id지정
<?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="@string/refresh"
android:icon="@drawable/refresh"
app:showAsAction="always" />
<item
android:id="@+id/menu_search"
android:title="@string/search"
android:icon="@drawable/search"
app:showAsAction = "always"/>
<item
android:id="@+id/menu_settings"
android:title="@string/settings"
android:icon="@drawable/settings"
app:showAsAction = "always"/>
</menu>
기본적으로 Method override로 두가지를 설정
1. menu 불러오기
2. menu item별 action 설정
onCreateOptionsMenu는 menu xml을 activity실행시
올리는 코드이다.
inflater로 menu directory를 설정해서 inflate한다.
그리고
onCreateOptionsMenu return은 true로 해야 제대로 올라간다.
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
onOptionsItemSelected는 각 item이 선택되었을 때, 동작을 설정한다.
현재는 그냥 toast로만 제대로 menu가 연결되었는지만 확인한다.
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int curId = item.getItemId();
//처음에 switch문으로 했는데 constant expression needed error가 떠서
//alt + enter로 if문으로 전체 변형함
if (curId == R.id.menu_refresh) {
showToast("새로고침 메뉴 선택됨");
} else if (curId == R.id.menu_search) {
showToast("검색 메뉴 선택됨");
} else if (curId == R.id.menu_settings) {
showToast("설정 메뉴 선택됨");
}
return super.onOptionsItemSelected(item);
}
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getSupportActionBar();
actionBar.setLogo(R.drawable.home_button);
//actionBar customizing가능함
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_USE_LOGO);
//두개의 flag값을 넣음
}