0
0

More than 1 year has passed since last update.

ActionBarをカスタマイズしてみる

Last updated at Posted at 2022-11-24

ActionBarって表示されるだけど、正直利用価値ない

AndroidのActivityのクラスでAppCompatActivityを継承すると自動的に実行時のアプリの上部にActionBarが表示されますが、アプリケーション名が表示されているだけで、何の飾りもありません。消すこともできるんですが、このActionBarをカスタマイズして、もっと色々なことにつかえるようにしてみましょう。

参考:
公式ホームページ:アプリバーの追加

どんなカスタマイズをするか?

  • ActionBarの色がデフォルトで紫色なので色を変えてみます。
  • ActionBarに表示されているタイトルを自由な文字列に変えてみます。
  • ActionBarにアイコンを1個追加、そのアイコンにアクションを追加します。
  • ActionBarメニューを追加、メニューも階層構造にします。メニューにアクションを追加します。
    出来上がりはこんな感じになります。

右端の:をタップするとメニューが表示されます。

さらにタイトル2は階層構造になっていて、その下に更にメニューがあります

メニューの定義ファイルを作る

resの下にmenuという名前でフォルダを作ります。
そのmenuを右クリック → 新規

Screenshot_20221124_212524.png
Menu Resource Fileを選択します。
Screenshot_20221124_212447.png
ファイル名は適当に、menu_sampleにします
Screenshot_20221124_212944.png
デザイナのビューが表示されます。まだ何もないのでからっぽです。
Screenshot_20221124_213137.png
左上のPaketteのビューから左下のComponetTreeのビューにドラック&ドロップして部品を追加していきます。
最初にActionBarにアイコンを追加します。Menu Itemをドラック&ドロップして追加します。アイコンの場合は、

app:showAsAction="ifRoom"

を指定して、android:iconにリソースの中から適当なアイコンを選択します。
Screenshot_20221124_214438.png
次にメニューを追加します。階層的には

  • アイコンアイテム (↑でつくったやつ)
  • メニューアイテム1
  • メニューアイテム2
    • メニュー
      • メニューアイテム3−1
      • メニューアイテム3−2

のような階層になるように作ります。 こんな感じです。
Screenshot_20221124_215032.png
出来上がりのmenu_sample.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/iconItem"
        android:icon="@android:drawable/ic_dialog_info"
        android:title="@string/titleIcon"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/menu_item1"
        android:orderInCategory="1"
        android:title="@string/title1"
        app:showAsAction="never"></item>
    <item
        android:id="@+id/menu_item2"
        android:orderInCategory="2"
        android:title="@string/title2"
        app:showAsAction="never">
        <menu >
            <item
                android:id="@+id/menu_item3_1"
                android:orderInCategory="3"
                android:title="@string/title3_1" />
            <item
                android:id="@+id/menu_item3_2"
                android:orderInCategory="4"
                android:title="@string/title3_2" />
        </menu>
    </item>

xmlの意味ですが、

app:showAsAction 意味
ifRoom 配置が許される範囲へ表示。配置が許される個数を表示。上記から溢れるアイテムは隠される。なので極力、可能であれば表示される。
always 常に表示する
never、なし 常に表示しない。全てのアイテムが隠される。

android:orderInCategoryはメニューの表示される順番を指定します。

MainActivityの作成

MainActivityはonCreateメソッドでAdtionBarのタイトルと色を変えてみます。(色とタイトルは適当に変えてください)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater) .apply {
            setContentView(this.root)
        }
        // ActionBarの色とタイトルを変えてみる
        supportActionBar?.setTitle("あー、ほげほげ")
        supportActionBar?.setBackgroundDrawable(ColorDrawable(Color.GREEN)) // アプリバーを緑にする
    }

ActionBarにメニューをインフレートするためにメソッドをoverrideします。R.menu.menu_sampleがmenu_sample.xmlのリソースIDです。

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_sample, menu)
        return true
    }

メニューが選択された場合のハンドラを定義するためメソッドをoverrideします。

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.iconItem -> {
                Toast.makeText(this, "アイコン付が選択されました", Toast.LENGTH_SHORT).show()
            }
            R.id.menu_item1 -> {
                Toast.makeText(this, "アイテム1が選択されました", Toast.LENGTH_SHORT).show()
            }
            R.id.menu_item2 -> {
                Toast.makeText(this, "アイテム2が選択されました", Toast.LENGTH_SHORT).show()
            }
            R.id.menu_item3_1 -> {
                Toast.makeText(this, "アイテム3−1が選択されました", Toast.LENGTH_SHORT).show()
            }
            R.id.menu_item3_2 -> {
                    Toast.makeText(this, "アイテム3−2が選択されました", Toast.LENGTH_SHORT).show()
            }
            else -> {}
        }
        return true
    }

以上で完成です。完成形はgitHubにありますのでそちらを参照してください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0