onCreateOptionsMenu() 호출이 안될때

park_sujeong·2023년 7월 24일
0

Android

목록 보기
13/13
post-thumbnail

앱 화면에 메뉴바를 만들때 사용하는 방법 중 하나가 Android Resource Directory/menu에 관련 xml을 만들고 그것을 Activity의 onCreateOptionsMenu()에서 inflate하는 방법이다.


코드는 이런식일 것이다.

res/menu/options_menu.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/search"
        android:icon="@drawable/round_search_24"
        android:title="@string/search_hint"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="ifRoom|withText" />
</menu>

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater).apply {
            setContentView(root)
            view = this@MainActivity
        }
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {

        menuInflater.inflate(R.menu.options_menu, menu)

        (menu.findItem(R.id.search).actionView as SearchView).apply {
            setOnQueryTextListener(object : SearchView.OnQueryTextListener {
                override fun onQueryTextSubmit(query: String): Boolean {
                    return false
                }

                override fun onQueryTextChange(newText: String): Boolean {
                    return false
                }

            })
        }

        return true
    }
}

근데 실행했을때 메뉴바가 안나오는 경우가 있다. 보통은 이 onCreateOptionsMenu()가 호출이 안되서인데 이유는 themes.xml을 보면 알 수 있다.



res/themes/themes.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.MediaSearch" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- Customize your light theme here. -->
        <!-- <item name="colorPrimary">@color/my_light_primary</item> -->
    </style>

    <style name="Theme.MediaSearch" parent="Base.Theme.MediaSearch" />
</resources>

NoActionBar라고 적힌 설정 때문에 onCreateOptionsMenu()가 호출이 안되는 것이다. 호출을 해주고 싶으면 아래처럼 변경해준다.

<style name="Base.Theme.MediaSearch" parent="Theme.Material3.DayNight">



이게 안드로이드 스튜디오를 업데이트하고 나서부터 NoActionBar 설정이 디폴트가 되었다. (더 자세한 것은 조사 후 추가 예정)

profile
Android Developer

0개의 댓글