Android toolbarと配置するitemについてのメモ


f:id:letitride:20190608083720p:plain:h160

所謂この部分、ツールバー?(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
        }
    }
}