OptionMenu

Du-Hyeon, Kim·2023년 9월 12일
0

Android

목록 보기
11/12

OptionMenu

구조

먼저,
Menu xml으로 menu layout을 구성
main xml에는 아무작업X
mainActivity에서 menu layout 연결
onOptionsItemSelected ovrride로 menu기능 구현

xml

1. menu xml 구성

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>

MainActivity

기본적으로 Method override로 두가지를 설정
1. menu 불러오기
2. menu item별 action 설정

1. onCreateOptionsMenu

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;
    }

2. onOptionsItemSelected

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);
    }

3. ActionBar logo 변경

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값을 넣음
    }

0개의 댓글