Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[34일차 Android] Option Menu 본문

Computer/Android

[34일차 Android] Option Menu

Wise-99 2023. 6. 17. 17:22

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Option Menu

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

onCreateOptionsMenu

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

OnOptionsItemSelected

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

 

 

 

예제 코드

main_menu.xml

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

    <item
        android:id="@+id/menu_item1"
        android:title="메뉴 항목1" />
    <item
        android:id="@+id/menu_item2"
        android:title="메뉴 항목2" />
    <item
        android:id="@+id/menu_item3"
        android:title="메뉴 항목3" >
        <menu >
            <item
                android:id="@+id/menu_item31"
                android:title="하위 메뉴 3-1" />
            <item
                android:id="@+id/menu_item32"
                android:title="하위 메뉴 3-2" />
        </menu>
    </item>
    <item
        android:id="@+id/menu_item4"
        android:title="메뉴 항목4" />
</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"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

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

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

 

 

 

MainActivity.kt

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)
    }

    // 옵션 메뉴를 구성하기 위해 사용하는 메서드
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {

        // 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 subMenu = menu?.addSubMenu("코드 메뉴 3")
        subMenu?.add(Menu.NONE, Menu.FIRST + 2, Menu.NONE, "하위 메뉴 3-1")
        subMenu?.add(Menu.NONE, Menu.FIRST + 3, Menu.NONE, "하위 메뉴 3-2")

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

        return true
    }

    // 옵션 메뉴에서 메뉴 항목을 선택하면 호출되는 메서드
    override fun onOptionsItemSelected(item: MenuItem): Boolean {

        activityMainBinding.run {

            /*when(item.itemId){
                R.id.menu_item1 -> textView.text = "메뉴 항목1을 선택했습니다."
                R.id.menu_item2 -> textView.text = "메뉴 항목2를 선택했습니다."
                R.id.menu_item31 -> textView.text = "하위 메뉴 3-1을 선택했습니다."
                R.id.menu_item32 -> textView.text = "하위 메뉴 3-2를 선택했습니다."
                R.id.menu_item4 -> textView.text = "메뉴 항목4를 선택했습니다."
            }*/

            when(item.itemId){
                Menu.FIRST -> textView.text = "코드 메뉴 1을 선택했습니다."
                Menu.FIRST+1 -> textView.text = "코드 메뉴 2를 선택했습니다."
                Menu.FIRST+2 -> textView.text = "하위 메뉴 3-1을 선택했습니다."
                Menu.FIRST+3 -> textView.text = "하위 메뉴 3-2을 선택했습니다."
                Menu.FIRST+4 -> textView.text = "코드 메뉴 4를 선택했습니다."
            }
        }

        return super.onOptionsItemSelected(item)
    }
}

코드 리뷰

  • override fun onCreateOptionsMenu(menu: Menu?): Boolean { ... }
    • menuInflater.inflate(R.menu.main_menu, menu) : 작성한 main_menu.xml 파일을 layout으로 설정하여 메뉴를 생성한다.
    • menu?.add(Menu.NONE, Menu.FIRST, Menu.NONE, "코드 메뉴 1") : menu를 코드로 작성하여 생성한다.
    • val subMenu = menu?.addSubMenu("코드 메뉴 3") : 하위 menu를 생성하기 위한 코드

 

  • override fun onOptionsItemSelected(item: MenuItem): Boolean { ... }
    • 첫번째 주석 처리된 when(item.itemId){ ... } : main_menu.xml 파일 내부의 menu item의 id를 사용하여 처리하는 코드
    • 두번째 when(item.itemId){ ... } : 코드로 작성한 menu의 int 값을 사용하여 처리하는 코드

 

 

결과

'Computer > Android' 카테고리의 다른 글

[34일차 Android] Popup Menu  (0) 2023.06.17
[34일차 Android] Context Menu  (1) 2023.06.17
[33일차 Android] Permission  (0) 2023.06.17
[32일차 Android] RecyclerView  (0) 2023.06.16
[32일차 Android] Spinner  (0) 2023.06.16