kotlinでandroid入門 メニュー

今回はメニュー :  Toolbar & onCreateOptionsMenu

![menu1.png](https://qiita-image-store.s3.amazonaws.com/0/258658/016af121-e7c3-4b26-ad80-8324cb88ab90.png)




### タイトルバー :  Toolbar
 1. mian/res/styles.xml の DarkActionBar を NoActionBar　に変更してタイトルバーを消す

```styles.xml
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>
```

2. xml に android.support.v7.widget.Toolbar

```
      <!-- ツールバー -->
        <android.support.v7.widget.Toolbar
          android:id="@+id/main_toolbar"
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/colorPrimary"
          android:fitsSystemWindows="true"
          app:title="Title"
          android:minHeight="?attr/actionBarSize" />
```

3. ツールバーをアクションバーとしてセット

```
    setSupportActionBar(main_toolbar)
    main_toolbar.setTitle(R.string.main_title)
    main_toolbar.setTitleTextColor(Color.WHITE)
    main_toolbar.setSubtitle(R.string.sub_title)
    main_toolbar.setSubtitleTextColor(Color.WHITE)
```

### オプションメニュー : onCreateOptionsMenu

1. menu の xml 作成
    例) menu.xml として

```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/action_settings0"
        android:title="@string/menu_msg0"
        app:showAsAction="never" />
    <item
        android:id="@+id/action_settings1"
        android:title="@string/menu_msg1"
        app:showAsAction="never" />
    <item
        android:id="@+id/action_settings2"
        android:title="@string/menu_msg2"
        app:showAsAction="never" />
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="@string/search"
        app:showAsAction="always" />
    <item
        android:id="@+id/action_add"
        android:icon="@android:drawable/ic_menu_add"
        android:title="@string/add"
        app:showAsAction="always" />        
    </menu>
```
      
2. オプションメニューの表示
   onCreate() の外
```
    // オプションメニューを作成する
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        // 
        getMenuInflater().inflate(R.menu.main_manu, mmenu)
        // オプションメニュー表示する場合はtrue
        return true
    }
        // ここでメニュー項目を表示前に調整できる
    override fun onPrepareOptionsMenu(menu: Menu): Boolean {
        super.onPrepareOptionsMenu(menu)
        menu.findItem(R.id.action_settings0).setVisible(false)
        menu.findItem(R.id.action_settings3).setTitle(R.string.menu_msg3X)
        menu.findItem(R.id.action_add).setVisible(false)
        return true
    }
```

3. メニュー選択時の処理

```
    // メニュー選択された時の処理
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.action_settings1 -> {
                tmpLowDisp(item.title.toString())
                true
            }
            R.id.action_settings2 -> {
                tmpLowDisp(item.title.toString())
                true
            }
            R.id.action_settings3 -> {
                tmpLowDisp(item.title.toString())
                true
            }
            R.id.action_search -> {
                tmpLowDisp(item.title.toString())
                true
            }
            else -> {
                super.onOptionsItemSelected(item)
            }
        }
    }
```