こんにちは、まっさん(@Tera_Msaki)です。
この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)
ポイント
Androidスマホのアプリ開発でメニューを使用する場合、使用できないメニューアイテムをユーザに通知する仕組みとして、メニューアイテムの色を変更することは有効な手段のひとつです。
ActionMenuViewでメニューを実装する場合、メニューの背景、文字の色はstyles.xmlに指定します。
しかし、styles.xmlには文字の色は1つしか指定できません。
使用できるメニューと、使用できないメニューで文字の色を変えるには、ひと工夫する必要があります。
ActionMenuViewのレイアウト定義
メニューの背景、文字の色などの指定をstyles.xmlにthemeとして定義します。
ActionMenuViewはメニューを開いていない状態のサイズとして、最低でも幅と高さは56dp必要です。
:
<!-- メニュー -->
<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" />
:
メニューの背景、文字の色などの指定
メニューの背景の指定は、android:colorBackgroundで色を指定します。
メニューアイテムの文字色(通常)の指定は、android:textColorで色を指定します。
ActionMenuViewはメニューを開いていない状態の色の指定は、android:textColorSecondaryで色を指定します。
:
<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>
:
メニューの実装
メニューの実装では、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_backup));
actionMenuView.getMenu().add(Menu.NONE, 1, Menu.NONE,context.getString(R.string.menu_restore));
actionMenuView.getMenu().add(Menu.NONE, 2, Menu.NONE,context.getString(R.string.menu_import));
actionMenuView.getMenu().add(Menu.NONE, 3, Menu.NONE,context.getString(R.string.menu_start));
actionMenuView.getMenu().add(Menu.NONE, 4, Menu.NONE,context.getString(R.string.menu_stop));
actionMenuView.getMenu().add(Menu.NONE, 5, Menu.NONE,context.getString(R.string.menu_subscription));
actionMenuView.getMenu().add(Menu.NONE, 6, Menu.NONE,context.getString(R.string.menu_course));
actionMenuView.getMenu().add(Menu.NONE, 7, Menu.NONE,context.getString(R.string.menu_system));
actionMenuView.getMenu().add(Menu.NONE, 8, Menu.NONE,context.getString(R.string.menu_clear));
actionMenuView.getMenu().add(Menu.NONE, 9, Menu.NONE,context.getString(archive ? R.string.menu_edit : R.string.menu_archive));
actionMenuView.getMenu().add(Menu.NONE, 10, 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);
setActionMenuView(actionMenuView.getMenu().getItem(6));
setActionMenuView(actionMenuView.getMenu().getItem(7));
:
// 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);
}
public void setActionMenuView(MenuItem menuItem) {
SpannableString spannableString = new SpannableString(menuItem.toString());
spannableString.setSpan(new UnderlineSpan(), 0, spannableString.length(), 0);
spannableString.setSpan(new StyleSpan(Typeface.BOLD), 0, spannableString.length(), 0);
menuItem.setTitle(spannableString);
}
}
メニューアイテムの文字の色を変更するには、SpannableStringクラスのSetSpanでForegroundColorSpanで文字の色を変更して、メニューアイテムを上書きする必要があります。
メニューアイテムを使用不可にする場合、setEnabledメソッドでfalseをセットします。
メニューアイテムの文字を太文字やアンダーラインで修飾するには、SpannableStringクラスのSetSpanでStyleSpanやUnderLineSpanで文字の修飾して、メニューアイテムを上書きします。
今回は、ここまでです。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪
これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。
未経験者からシステムエンジニアを目指すのに最適です。まずは無料相談から♪
未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪
カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪
ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪
参考になったら、💛をポッチとしてね♪
コメント欄