반응형

Ex15OptionMenu

안드로이드 네이티브 앱 개발 수업 예제#15

주요코드

OptionMenu 추가하기 [ 제목줄에 보여지는 메뉴여서 ActionBar Menu라고도 함]

  • OptionMenu를 만들기 위한 메소드 onCreateOptionsMenu() 오버라이드
  • OptionMenu 만들어 추가하는 2가지 방법
    1. 방법1. 자바언어로 메뉴아이템 추가..(잘 사용하지 않음)
    2. 방법 2. XML언어로 메뉴항목들을 설계하고 자바언어의 MenuItem객체로 만들어서(부풀리다inflate) Menu에 추가하는 방법을 사용함.
    res폴더>>menu폴더 생성 [ res폴더에서 마우스오른쪽버튼 메뉴에서 'Android Resource Directory' 선택 후 위에서 2번째 항목의 'Resource Type'에서 'menu'선택하면 menu폴더 추가됨] menu폴더에 있는 actionbar_main.xml문서를 읽어와서 Menu객체로 만들어주는(부풀려주는inflate) 객체인 MenuInflater사용
  • OptionMenu의 Menu(MenuItem)클릭 반응하기

실행모습

 

 

실행모습 GIF

 

소스코드

- activity_main.xml은 수정할 것이 없음.

- 제목줄(액션바)에 보여줄 메뉴의 항목들 Menu Resource로 설계

 

- res폴더>>menu폴더 생성 [ res폴더에서 마우스오른쪽버튼 메뉴에서 'Android Resource Directory' 선택 후 위에서 2번째 항목의 'Resource Type'에서 'menu'선택하면 menu폴더 추가됨 

- 추가된 menu 폴더에서 마우스오른쪽버튼 메뉴에서 [ New > Menu Reource File ]선택하여 file name 칸에 "actionbar_main"을 쓰고 [OK]를 누르면 메뉴리소스파일 이 만들어 짐.

# res / menu / actionbar_main.xml
<?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_search"
        android:title="Search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"/>
        <!-- showAsAction="always" : 제목줄(ActionBar)에 항상 아이콘으로 노출됨 -->

    <item
        android:id="@+id/menu_add"
        android:title="Add"
        android:icon="@android:drawable/ic_menu_add"
        app:showAsAction="ifRoom"/>
        <!-- showAsAction="ifRoom" : 제목줄(ActionBar)에 제목글씨를 제외하고 놓여질 공간이 있으면 노출, 아니면 오버플로우메뉴로 들어가는 설정[권장] -->

    <item
        android:id="@+id/menu_helf"
        android:title="Helf"
        android:icon="@android:drawable/ic_menu_help"
        app:showAsAction="never"/>
        <!-- showAsAction="never" : 항상 오버플로우(오른쪽 끝 세로 점3개 아이콘) 메뉴에 숨었다가 눌렀을 때 노출되는 설정 -->
        <!-- 오버플로우(오른쪽 끝 세로 점3개 아이콘) 메뉴에 숨은 메뉴아이템은 기본적으로 아이콘이 보이지 않음 -->

    <item
        android:id="@+id/menu_aaa"
        android:title="aaa"
        app:showAsAction="never"/>

</menu>

 

 

# MainActivity.java
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //onCreate()메소드가 실행된 후
    //자동으로 OptionMenu를 만드는 작업을 하는
    //이 콜백메소드가 발동
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        //매개변수로 전달된 Menu객체에게 MenuItem(메뉴항목)을 추가[ 2가지 방법 ]

        // 방법1. 자바언어로 메뉴아이템 추가..(잘 사용하지 않음)
        //menu.add( 0, 1, 0, "aaa" );
        //menu.add( 0, 2, 0, "bbb");


        // 방법 2. XML언어로 메뉴항목들을 설계하고
        //자바언어의 MenuItem객체로 만들어서(부풀리다inflate)
        //Menu에 추가하는 방법을 사용함.

        // res폴더>>menu폴더 생성 [ res폴더에서 마우스오른쪽버튼 메뉴에서 'Android Resource Directory' 선택 후 위에서 2번째 항목의 'Resource Type'에서 'menu'선택하면 menu폴더 추가됨]
        //menu폴더에 있는 actionbar_main.xml문서를 읽어와서
        //Menu객체로 만들어주는(부풀려주는inflate) 객체를 얻어오기
        MenuInflater inflater= getMenuInflater();
        inflater.inflate(R.menu.actionbar_main, menu);


        //* 오버플로우 메뉴들은 기본적으로 아이콘이 보이지 않도록 되어 있지만 코드를 통해 줄수는 있음.- 꼭 필요하지 않음.
//        if( menu instanceof MenuBuilder){
//            MenuBuilder m= (MenuBuilder)menu;
//            m.setOptionalIconsVisible(true);
//        }

        return super.onCreateOptionsMenu(menu);
    }

    //OptionMenu의 메뉴항목(MenuItem)을 선택했을때
    //자동으로 실행되는 콜백메소드
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id= item.getItemId();

        switch ( id ){

            case R.id.menu_search:
                Toast.makeText(this, "Search", Toast.LENGTH_SHORT).show();
                break;

            case R.id.menu_add:
                Toast.makeText(this, "Add", Toast.LENGTH_SHORT).show();
                break;

            case R.id.menu_helf:
                Toast.makeText(this, "Helf", Toast.LENGTH_SHORT).show();
                break;

        }

        return super.onOptionsItemSelected(item);
    }
}
반응형

+ Recent posts