メニューファイルの追加
・res フォルダを右クリックして、[New] > [Android Resource File] を選択
・[Resource Type] を Menu に、[File Name] を 設定してOKをクリック
メニューオプション
id:ビューと同様にメニュー オプションにも ID があり、コード内で参照できます。
title:スクリーン リーダーがメニューを識別するのに役立ちます。
icon:表示アイコンファイル名
showAsAction:ボタンを表示する方法をシステムに指示します。「always」に設定されているため、このボタンは常にアプリバーに表示され、オーバーフロー メニューには含まれません。
menuのレイアウトファイルの例
<?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_switch_layout"
android:title="@string/action_switch_layout"
android:icon="@drawable/ic_linear_layout"
app:showAsAction="always" />
</menu>
Kotlin側で状態に応じてメニューアイコンを変更する例
class MainActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
// メニューの表示状態を表す変数
private var isLinearLayoutManager = true
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
recyclerView = binding.recyclerView
// 画面表示レイアウトを設定する
chooseLayout()
}
// メニューの表示モードに合わせてリサイクラービューのレイアウトを変更する
private fun chooseLayout() {
if (isLinearLayoutManager) {
recyclerView.layoutManager = LinearLayoutManager(this)
} else {
recyclerView.layoutManager = GridLayoutManager(this, 4)
}
recyclerView.adapter = LetterAdapter()
}
// メニューアイコンのセット
private fun setIcon(menuItem: MenuItem?) {
if (menuItem == null)
return
menuItem.icon =
if (isLinearLayoutManager)
ContextCompat.getDrawable(this, R.drawable.ic_grid_layout)
else ContextCompat.getDrawable(this, R.drawable.ic_linear_layout)
}
// メニューの設定
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
// メニューのインフレート
menuInflater.inflate(R.menu.layout_menu, menu)
// アクションスイッチボタンの取得
val layoutButton = menu?.findItem(R.id.action_switch_layout)
// アイコンのセット
setIcon(layoutButton)
return true
}
// メニューボタン選択時の動作
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_switch_layout -> {
// 値を反転させる
isLinearLayoutManager = !isLinearLayoutManager
// レイアウトの変更とアイコンの変更
chooseLayout()
setIcon(item)
return true
}
else -> super.onOptionsItemSelected(item)
}
}
}
トレーニング > KOTLIN を用いた ANDROID の基本 > ナビゲーション > 画面の移動 > アクティビティとインテント > 8. メニューとアイコンを設定する