MenuItemの文字色を動的に変更する
MenuItemのtitleにSpannableStringBuilderで加工したテキストを渡してあげる。なので色以外も変更できる。
val titleText = menuItem.title val builder = SpannableStringBuilder(titleText) val colorSpan = ForegroundColorSpan(color) builder.setSpan(colorSpan, 0, titleText.length, SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE) menuItem.title = builder
MenuItemの取得方法
Toolbarに直接Menuをinflateしている場合はToolbarのMenuから取得できる。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) binding.toolbar.inflateMenu(R.menu.hoge) val menuItem: MenuItem = binding.toolbar.menu.findItem(R.id.piyo) }
onCreateOptionsMenuでMenuをinflateしてる場合は、onPrepareOptionsMenuを invalidateOptionsMenu()
で呼び出しMenuItemを取得し処理する。
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.hoge, menu) return true } override fun onPrepareOptionsMenu(menu: Menu?): Boolean { val menuItem: MenuItem? = menu?.findItem(R.id.piyo) return true }