はじめに
Android のダイアログとかポップぽいものを Popup としてまとめました。(どう呼んでいいかわからないけど。。。)
Android は標準でできることが多い。。。
一つの記事にまとめようと思ったのですが、わりと多かったので分割します。今回は Menu について!
ソースは github にあげてます↓↓↓
ソース(github)
Menu
Menu
は下記の3種類あって menu の xml ファイルを設定して表示する。(コードでもできる)
オプション | コンテキスト | ポップアップ |
---|---|---|
今回はxmlは下記の同じやつを使用。(custom_menu.xml)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/section1" android:title="セクション1" > <menu> <item android:id="@+id/section1_menu1" android:title="メニュー1" /> <item android:id="@+id/section1_menu2" android:title="メニュー2" /> </menu> </item> <item android:id="@+id/section2" android:title="セクション2" > <menu> <item android:id="@+id/section2_menu1" android:title="メニュー3" /> <item android:id="@+id/section2_menu2" android:title="メニュー4" /> </menu> </item> <item android:id="@+id/section3" android:title="セクション3" /> </menu> |
オプションメニュー
アプリバーに表示するやつ
実装
Activity
で onCreateOptionsMenu
と onOptionsItemSelected
を override すれば実装できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
override fun onCreateOptionsMenu(menu: Menu?): Boolean { val inflater: MenuInflater = menuInflater inflater.inflate(R.menu.option_menu, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.section1_menu1 -> { Toast.makeText(this, "メニュー1", Toast.LENGTH_SHORT).show() true } R.id.section1_menu2 -> { Toast.makeText(this, "メニュー2", Toast.LENGTH_SHORT).show() true } R.id.section2_menu1 -> { Toast.makeText(this, "メニュー3", Toast.LENGTH_SHORT).show() true } R.id.section2_menu2 -> { Toast.makeText(this, "メニュー4", Toast.LENGTH_SHORT).show() true } R.id.section3 -> { Toast.makeText(this, "セクション3", Toast.LENGTH_SHORT).show() true } else -> super.onOptionsItemSelected(item) } } |
コンテキストメニュー
指定の View を長押ししたときに表示するやつ
実装
Activity
で registerForContextMenu
で長押しする View を登録して onCreateContextMenu
と onContextItemSelected
を override すれば実装できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// onCreateとかで登録 registerForContextMenu(findViewById(R.id.button_context_menu)) override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) { super.onCreateContextMenu(menu, v, menuInfo) val inflater: MenuInflater = menuInflater menu?.setHeaderTitle("ヘッダー") // ヘッダータイトルを設定できる inflater.inflate(R.menu.context_menu, menu) } override fun onContextItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.section1_menu1 -> { Toast.makeText(this, "メニュー1", Toast.LENGTH_SHORT).show() true } R.id.section1_menu2 -> { Toast.makeText(this, "メニュー2", Toast.LENGTH_SHORT).show() true } R.id.section2_menu1 -> { Toast.makeText(this, "メニュー3", Toast.LENGTH_SHORT).show() true } R.id.section2_menu2 -> { Toast.makeText(this, "メニュー4", Toast.LENGTH_SHORT).show() true } R.id.section3 -> { Toast.makeText(this, "セクション3", Toast.LENGTH_SHORT).show() true } else -> super.onContextItemSelected(item) } } |
ポップアップメニュー
ボタンタップなどで表示するやつ
実装
ボタンタップ時などに PopupMenu
を生成して show()
で表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
findViewById<Button>(R.id.button_popup).setOnClickListener { val popup = PopupMenu(this, it) val inflater: MenuInflater = popup.menuInflater inflater.inflate(R.menu.popup_menu, popup.menu) popup.setOnMenuItemClickListener { return@setOnMenuItemClickListener when (it.itemId) { R.id.section1_menu1 -> { Toast.makeText(this, "メニュー1", Toast.LENGTH_SHORT).show() true } R.id.section1_menu2 -> { Toast.makeText(this, "メニュー2", Toast.LENGTH_SHORT).show() true } R.id.section2_menu1 -> { Toast.makeText(this, "メニュー3", Toast.LENGTH_SHORT).show() true } R.id.section2_menu2 -> { Toast.makeText(this, "メニュー4", Toast.LENGTH_SHORT).show() true } R.id.section3 -> { Toast.makeText(this, "セクション3", Toast.LENGTH_SHORT).show() true } else -> false } } popup.show() } |
参考
おわりに
メニューの種類が豊富であんま使い分けわかってない。。。
コメント