본문 바로가기
2022년

Option Menu

by 박상윤 2021. 10. 18.

- 안드로이드에서 화면 하나당 하나씩 가질 수 있는 메뉴를 의미하며 현재 보이는 화면(Activity)의 메인 메뉴가 된다.

 

onCreateOptionsMenu

- 화면을 관리하는 객체인 Activity 객체가 만들어 질 때 자동으로 호출되는 메서드이며 여기에서 메뉴를 생성하게 된다.

- 메서드가 true를 반환하면 메뉴가 나타난다.

 

메뉴 고정적 -> XML 이용

메뉴 유동적 -> 코드 이용

 

1. XML 이용

package com.sypark.optionmenu

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        // XML로 메뉴를 구성한다.
        menuInflater.inflate(R.menu.main_menu,menu)

        return true
    }
}

OnOptionsItemSelected

- 사용자가 메뉴를 선택했을 때 자동으로 호출되는 메서드이다.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // 메뉴를 id별로 분기한다.
        when(item.itemId){
            R.id.item1 -> {
                textView.text = "메뉴 1을 눌렀습니다."
            }
            R.id.item2 -> {
                textView.text = "메뉴 2를 눌렀습니다."
            }
            R.id.item3 -> {
                textView.text = "메뉴 3을 눌렀습니다."
            }
        }

        return super.onOptionsItemSelected(item)
    }

메뉴 1을 누르자 textView의 text가 변경되었다.

옵션 메뉴 안에 새로운 메뉴를 추가해 줄 수 있다.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // 메뉴를 id별로 분기한다.
        when(item.itemId){
            R.id.item1 -> {
                textView.text = "메뉴 1을 눌렀습니다."
            }
//            R.id.item2 -> {
//                textView.text = "메뉴 2를 눌렀습니다."
//            }

            R.id.item1_1 -> {
                textView.text = "메뉴 1-1을 눌렀습니다."
            }

            R.id.item1_2 -> {
                textView.text = "메뉴 1-2를 눌렀습니다."
            }

            R.id.item3 -> {
                textView.text = "메뉴 3을 눌렀습니다."
            }
        }

        return super.onOptionsItemSelected(item)
    }

 

2. 코드를 이용

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        // XML로 메뉴를 구성한다.
        //menuInflater.inflate(R.menu.main_menu,menu)

        //코드를 통해 메뉴를 구성한다.
        menu?.add(Menu.NONE,Menu.FIRST,Menu.NONE, "코드 메뉴1")
        //menu?.add(Menu.NONE,Menu.FIRST+1,Menu.NONE,"코드 메뉴2")
        val sub = menu?.addSubMenu("코드 메뉴2")
        sub?.add(Menu.NONE,Menu.FIRST+10,Menu.NONE,"코드 메뉴2-1")
        sub?.add(Menu.NONE,Menu.FIRST+20,Menu.NONE,"코드 메뉴2-2")

        menu?.add(Menu.NONE,Menu.FIRST+2,Menu.NONE,"코드 메뉴3")

        return true
    }

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // 메뉴를 id별로 분기한다.
//        when(item.itemId){
//            R.id.item1 -> {
//                textView.text = "메뉴 1을 눌렀습니다."
//            }
////            R.id.item2 -> {
////                textView.text = "메뉴 2를 눌렀습니다."
////            }
//
//            R.id.item1_1 -> {
//                textView.text = "메뉴 1-1을 눌렀습니다."
//            }
//
//            R.id.item1_2 -> {
//                textView.text = "메뉴 1-2를 눌렀습니다."
//            }
//
//            R.id.item3 -> {
//                textView.text = "메뉴 3을 눌렀습니다."
//            }
//        }
        when(item.itemId){
            Menu.FIRST -> {
                textView.text = "코드메뉴 1을 눌렀습니다"
            }
            Menu.FIRST+10 -> {
                textView.text = "코드메뉴 2-1을 눌렀습니다"
            }
            Menu.FIRST+20 -> {
                textView.text = "코드메뉴 2-2를 눌렀습니다"
            }
            Menu.FIRST+2 -> {
                textView.text = "코드메뉴 3을 눌렀습니다"
            }
        }

        return super.onOptionsItemSelected(item)
    }
}

 

정리

- Option Menu는 Activity당 하나씩 가지고 있는 메뉴이며 현재 화면의 메인 메뉴로 사용된다.

'2022년' 카테고리의 다른 글

Popup Menu  (0) 2021.10.19
Context Menu  (0) 2021.10.18
권한  (0) 2021.10.18
RecyclerView  (0) 2021.10.11
Array.prototype.indexOf()  (0) 2021.07.24