こんにちは、まっさん(@Tera_Msaki)です。
この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)
◎テーマ
ActionMenuViewで使用不可のメニューの文字色を変更する
◎ポイント
Androidスマホのアプリ開発でメニューを使用する場合、
使用できないメニューアイテムをユーザに通知する仕組みとして、
メニューアイテムの色を変更することは有効な手段のひとつです。
メニューの実装では、ActionMenuView を使用します。
メニューの背景、メニューアイテムの文字の色などの指定は、styles.xml に定義しますが、
文字の色は1つしか指定できません。
使用できるメニューと使用できないメニューで文字の色を変えるには、
ひと工夫する必要があります。

◎ActionMenuViewのレイアウト定義
:
<!-- メニュー -->
<androidx.appcompat.widget.ActionMenuView
android:id="@+id/menu"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:theme="@style/ActionMenuViewStyle" />
:
メニューの背景、文字の色などの指定を styles.xml に themeとして定義します。
ActionMenuViewはメニューを開いていない状態のサイズとして、
最低でも幅と高さは 56dp 必要なようです。
◎メニューの背景、文字の色などの指定
:
<style name="ActionMenuViewStyle">
<item name="android:colorBackground">@color/white</item>
<item name="android:textColor">@color/black</item>
<item name="android:textColorSecondary">@color/black</item>
</style>
:
メニューの背景の指定は、android:colorBackground で色を指定します。
メニューアイテムの文字色(通常)の指定は、android:textColor で色を指定します。
ActionMenuViewはメニューを開いていない状態の色の指定は、
android:textColorSecondary で色を指定します。
◎メニューの実装
メニューの実装では、Activity (または、Fragment)の onCreate などで ActionMenuView のオブジェクトを取得して、
メニューアイテムを定義します。
定義したメニューアイテムの制御で、使用不可のメニューアイテムの無効化と色を変更します。
:
private ActionMenuView actionMenuView;
:
// OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
:
// メニューアイテムの定義
actionMenuView = findViewById(R.id.menu);
actionMenuView.getMenu().add(Menu.NONE, 0, Menu.NONE,context.getString(R.string.menu_course));
actionMenuView.getMenu().add(Menu.NONE, 1, Menu.NONE,context.getString(R.string.menu_system));
actionMenuView.getMenu().add(Menu.NONE, 2, Menu.NONE,context.getString(R.string.menu_backup));
actionMenuView.getMenu().add(Menu.NONE, 3, Menu.NONE,context.getString(R.string.menu_restore));
actionMenuView.getMenu().add(Menu.NONE, 4, Menu.NONE,context.getString(R.string.menu_clear));
actionMenuView.getMenu().add(Menu.NONE, 5, Menu.NONE,context.getString(R.string.menu_start));
actionMenuView.getMenu().add(Menu.NONE, 6, Menu.NONE,context.getString(R.string.menu_stop));
actionMenuView.getMenu().add(Menu.NONE, 7, Menu.NONE,context.getString(R.string.menu_subscription));
actionMenuView.getMenu().add(Menu.NONE, 8, Menu.NONE,context.getString(R.string.menu_help));
:
// OnResume
@Override
protected void onResume() {
super.onResume();
:
// メニューアイテムの制御
setActionMenuView(actionMenuView.getMenu().getItem(2), context.getColor(R.color.grey), false);
setActionMenuView(actionMenuView.getMenu().getItem(3), context.getColor(R.color.grey), false);
:
// ActionMenuView制御 //
private void setActionMenuView(MenuItem menuItem, int color, boolean enable) {
SpannableString spannableString = new SpannableString(menuItem.toString());
spannableString.setSpan(new ForegroundColorSpan(color), 0, spannableString.length(), 0);
menuItem.setTitle(spannableString);
menuItem.setEnabled(enable);
}
}
ActionMenuView のメニューアイテムの文字の色を変更するには、SpannableString クラスで文字の色を変更して、ActionMenuView のメニューアイテムを上書きする必要があります。
メニューアイテムを使用不可にする場合、setEnabled メソッドで false をセットします。

◎これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
初めてのAndroidのアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、JavaやC#などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、
かなりの時間がかかりますので、オンラインスクールでの習得をおススメします。




コメント欄