본문 바로가기

컴퓨터/안드로이드

[안드로이드] xml을 이용해 옵션메뉴(OptionMenu) 사용하기

반응형

 

 

 

안드로이드 스튜디오를 이용해 옵션 메뉴를 이용하는 방법에 대해서 알아봅시다.

 

전체적인 과정은 이러합니다. 

 

1. 메뉴 폴더 생성 및 메뉴 XML 파일 생성, 편집 (메뉴 코딩)

 

2. Java코딩 : onCreateOptionMenu() 오버라이딩 (메뉴 파일 등록)

 

3. Java코딩 : onOptionsItemSelected() 오버라이딩 (메뉴 선택 시 작동할 내용 코딩)

 

 

 

순서대로 진행해 보겠습니다.

 

먼저 app/res 폴더에 menu라는 폴더를 생성해줍니다.

 

 

 

 

menu폴더가 만들어 졌으면 menu에 사용할 xml 파일을 만들어 줍니다.

 

 

 

 

menu1.xml 파일은 아래 처럼 작성 해보겠습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/item1"
        android:title="item1" />
    <item
        android:id="@+id/item2"
        android:title="item2" />

    <item android:title="item3">
        <menu>
            <item
                android:id="@+id/item4"
                android:title="item4" />
            <item
                android:id="@+id/item5"
                android:title="item5" />
        </menu>
    </item>
</menu>

위 코드에서 알 수 있는 점은 menu도 layout과 마찬가지로 nested구조로 사용 할 수 있다는 것입니다.

다시 말하자면 하나의 menu 의 아이템으로 다른 menu를 사용 할 수 있습니다.

 

 

 

 

activity_main.xml은 아래와 같이 쓰겠습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/baseLayout"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button" />

</LinearLayout>

 

 

 

 

MainActivity.java에 들어갈 onCreateOptionMenu() 메서드의 기본 형식은 아래와 같습니다.

 

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.메뉴XML아이디, menu);
        return true;
    }

inflater라는 것은 정적으로 생성된 XML 파일을 Java에서 접근하여 실제 객체(동적)로 이용하기 위한 것이라고 생각하시면 됩니다. 혹은, 단순히 메뉴를 생성하기 위한, 연결하기 위한 중간자라고 생각하시면 됩니다.

 

 

 

MainActivity.java에 들어갈 onOptionsItemSelected() 메소드 기본 형식은 아래와 같습니다.

 

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.항목1아이디:
                // 항목1을 선택했을때 실행할 코드
                return true;
            case R.id.항목2아이디:
                // 항목2을 선택했을때 실행할 코드
                return true;
        }
        return false;
    }

 

 

위 내용들을 참고하여 MainActivity.java 는 아래와 같이 쓰겠습니다.

 

package yourPackage;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    LinearLayout baseLayout;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        baseLayout = findViewById(R.id.baseLayout);
        button = findViewById(R.id.button);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.menu1, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1:
                // 항목1을 선택했을때 실행할 코드
                return true;
            case R.id.item2:
                // 항목2을 선택했을때 실행할 코드
                return true;
            case R.id.item4:
                // 항목4을 선택했을때 실행할 코드
                return true;
            case R.id.item5:
                // 항목5을 선택했을때 실행할 코드
                return true;
        }
        return false;
    }
}

실행 결과는 아래와 같습니다.

 

 

 

 

 

 

 

 

반응형