所謂この部分、ツールバー?(iOSではナビゲーションバーかな?)と呼ぶらしいんだけど、これについての取り扱いについて色々ハマったのでメモ。
タイトル名を変更
toolbar.setTitle("ツールバー")
または、
setSupportActionBar(toolbar)
supportActionBar?.setTitle("ツールバー")
ただし、toolbar.setTitle()
の場合、先にsetSupportActionBar(toolbar)
を読んでいるとダメ。
ダメな例
setSupportActionBar(toolbar)
toolbar.setTitle("ツールバー")
OKな例
toolbar.setTitle("ツールバー")
setSupportActionBar(toolbar)
ナビゲーションアイコンを設置
画像でいうところのツールバー左の❌アイコン。
//アイコンの設置 toolbar.setNavigationIcon(android.R.drawable.ic_delete) //リスナー定義 toolbar.setNavigationOnClickListener { }
ただし、setNavigationOnClickListener()
リスナー定義後に、setSupportActionBar(toolbar)
を呼ぶとリスナーが効かなくなる。
ダメな例
toolbar.setNavigationOnClickListener { } setSupportActionBar(toolbar)
オブションメニュー / オプションアイコン
右側の⭐️マークアイコン。これはmenu resourceを先に作っておく。res/menu/(無い場合はres/からresource directoryを作成)にこういったファイルを作成
menu_item.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="sample" android:id="@+id/star" android:icon="@android:drawable/btn_star" app:showAsAction="always"/> </menu>
override fun onCreateOptionsMenu()
で設置するが、setSupportActionBar(toolbar)
を呼び出しておかないとコールバックされない
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) setSupportActionBar(toolbar) } override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.menu_item, menu) return super.onCreateOptionsMenu(menu) } //リスナー定義 複数設置できるのでitemIdごとに定義できる override fun onOptionsItemSelected(item: MenuItem?): Boolean { if(item?.itemId == R.id.star){ } return super.onOptionsItemSelected(item) } }
または、setSupportActionBar(toolbar)
を呼ばずに、toolbar.inflateMenu()
で設置する。
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) toolbar.inflateMenu(R.menu.menu_item) toolbar.setOnMenuItemClickListener { if(it.itemId == R.id.star){ } true } } }
リンク
リンク