KotlinでAndroidのオーバーフローメニューアイコンをプログラムから変更する方法
概要
このチュートリアルでは、Kotlinを使ってAndroidアプリのオーバーフローメニューアイコン(縦3点の「⋮」アイコン)をプログラムから変更する方法を解説します。Toolbarのカスタマイズとメニューリソースの作成を通じて、オプションメニューの表示や動作の制御方法もあわせて学べます。
手順1:新規プロジェクトの作成
Android Studioを起動し、「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。
手順2:レイアウトファイル(activity_main.xml)の編集
res/layout/activity_main.xml に以下のコードを追加します。ここではLinearLayoutの中にToolbarを配置しています。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="4dp"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/tootBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>手順3:MainActivity.kt の実装
src/MainActivity.kt に以下のコードを記述します。onCreateOptionsMenu()でメニューを展開し、onOptionsItemSelected()で各メニュー項目が選択されたときの処理をToastで表示しています。また、onPrepareOptionsMenu()ではメニュー項目の表示・非表示を動的に切り替えています。
import android.graphics.Color
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
lateinit var toolBar: Toolbar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
toolBar = findViewById(R.id.tootBar)
toolBar.title = "MyToolBar"
toolBar.setTitleTextColor(Color.WHITE)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.option1 -> {
Toast.makeText(
applicationContext, "Bluetooth Option Selected",
Toast.LENGTH_SHORT
).show()
true
}
R.id.option2 -> {
Toast.makeText(applicationContext, "Call Option Selected", Toast.LENGTH_SHORT)
.show()
true
}
R.id.option3 -> {
Toast.makeText(applicationContext, "About Option Selected", Toast.LENGTH_SHORT)
.show()
true
}
R.id.option4 -> {
Toast.makeText(applicationContext, "Chat Option Selected", Toast.LENGTH_SHORT)
.show()
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onPrepareOptionsMenu(menu: Menu): Boolean {
invalidateOptionsMenu()
menu.findItem(R.id.option2).isVisible = false
menu.findItem(R.id.option4).isVisible = true
return super.onPrepareOptionsMenu(menu)
}
}手順4:メニューリソースファイルの作成
まずAndroid Resource Directoryとして「menu」タイプのディレクトリを作成し、その中にメニューリソースファイルを追加します。そして以下のコードを記述してください。showAsAction属性の指定により、スペースがある場合にアクションバーへアイコンを表示するか、オーバーフローメニューに格納するかを制御できます。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto">
<item
android:id="@+id/option1"
android:orderInCategory="1"
android:title="Bluetooth"
android:icon="@drawable/ic_baseline_bluetooth_24"
app:showAsAction="ifRoom" />
<item
android:id="@+id/option2"
android:orderInCategory="2"
android:title="Call"
android:icon="@drawable/ic_baseline_call_24"
app:showAsAction="ifRoom|collapseActionView" />
<item android:id="@+id/option4"
android:title="Chat"
android:visible="false"
android:orderInCategory="3"
android:icon="@drawable/ic_baseline_chat_24"
app:showAsAction="ifRoom|collapseActionView"/>
<item
android:id="@+id/option3"
android:title="About"
app:showAsAction="never" />
</menu>手順5:AndroidManifest.xml の編集
androidManifest.xml に以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.q11">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>アプリの実行と確認
それでは、実際にアプリを実行してみましょう。実機のAndroidスマートフォンをパソコンに接続していることを前提とします。Android Studioでプロジェクト内のいずれかのActivityファイルを開き、ツールバーの「Run(▶)」アイコンをクリックしてください。デバイス選択画面で自分のモバイル端末を選ぶと、端末にアプリの初期画面が表示されます。


-
Androidでメニュー項目のテキストカラーを変更する方法をわかりやすく解説
この記事では、Androidアプリのオプションメニュー項目のテキストカラー(文字色)を変更する方法を、実際のサンプルコードとともにステップバイステップで解説します。テーマのスタイルを少し編集するだけで、メニューの見た目を自由にカスタマイズできるようになります。 完成イメージ ツールバーに表示されるメニューアイテムやオーバーフローメニュー内のテキストが、指定した色(本記事では赤系の色)に変わります。 手順1:Android Studioで新規プロジェクトを作成する Android Studioを起動し、File → New Project を選択して、必要な情報を入力して新しいプロジェクトを
-
【Android】オーバーフローメニューのアイコンをプログラムで変更・制御する方法
はじめにこのチュートリアルでは、Androidアプリのツールバーに表示されるオーバーフローメニュー(縦3点アイコン)を、プログラムから動的に変更・制御する方法を解説します。メニュー項目の表示・非表示の切り替えなど、実践的なテクニックもあわせて紹介します。手順1:新規プロジェクトの作成Android Studioを起動し、「File」→「New Project」を選択して、必要な情報を入力し、新しいプロジェクトを作成します。手順2:レイアウトファイル(activity_main.xml)の編集res/layout/activity_main.xml に以下のコードを追加します。ここでは、Line