액션바 메뉴 만들기


이번에는 간단하게 RecyeclerView의 LayoutManager 를 메뉴를 통해 변경하는 실습을 진행


  • 메뉴 res 파일 만들기

    • res -> New -> Andriod Resource File -> Resource Type: Menu


  • 메뉴 xml 파일에 아이탬 추가


menu1.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/menuItem1"
        android:title="Linear"/>
    <item
        android:id="@+id/menuItem2"
        android:title="Grid"/>
    <item
        android:id="@+id/menuItem3"
        android:title="StaggeredGrid"/>
</menu>


app namespace를 선언해주고 app:showAsAction=”always” 설정시 액션바에 항상 아이탬이 보여지게할 수 있음

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    ...

    <item
        ...
        app:showAsAction="always"/>
        
</menu>


  • onCreateOptionsMenu() 함수 오버라이딩


onCreateOptionsMenu() 함수를 오버라이딩 해서 위에서 만들었던 menu1.xml파일을 띄워주자

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.menu1, menu)
    return true
    //return super.onCreateOptionsMenu(menu)
}


  • onOptionsItemSelected() 함수 오버라이딩


onOptionsItemSelected() 함수를 오버라이딩해 메뉴 아이탬이 선택되면 recyclerView 스타일을 바꾸도록 하면 끝

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when(item.itemId){
        R.id.menuItem1-> recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
        R.id.menuItem2-> recyclerView.layoutManager = GridLayoutManager(this, 3)
        R.id.menuItem3-> recyclerView.layoutManager = StaggeredGridLayoutManager(3, RecyclerView.VERTICAL)
    }
    return super.onOptionsItemSelected(item)
}