布団の中にいたい

Elasticsearchいじったり、Androidアプリ書いたり。最近は数学の勉強が楽しくなってきました。

SearchViewの背景色を変更する

SearchViewを導入して、クエリを入力して検索するところまで出来たので、今度はSearchViewの見た目自体を変更しようとしたのですが、かなり詰まったので、その際に調べた内容をまとめます。

SearchViewは他のViewとは微妙に異なっていて、SearchView自体が複数のViewから構成されるViewになっています。具体例で言うと、実際にクエリを入力するEditTextや検索アイコンのImageViewなどが内部で定義されています。なので、アイコンを変えたり背景色を変えたいという場合は、その内部で定義されているViewを変更してあげれば大丈夫です。

今回、SearchViewの背景色を変更したかったので、以下のようにしました。

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.main, menu)

    val menuItem = menu.findItem(R.id.action_search)
    val searchView = MenuItemCompat.getActionView(menuItem) as SearchView

    searchView.findViewById(android.support.v7.appcompat.R.id.search_edit_frame)
            .setBackgroundColor(R.color.white)
   
    // 以下任意の処理
}

これでSearchViewの背景色を変更することができました。他にもsearch_mag_icon(検索アイコン)だったり、search_close_button(☓ボタン)があったりします。SearchViewの何かしらを変更する際は、SearchViewの子要素を色々変更するといいかもしれません。