2

アプリのオプション メニューをカスタマイズしたいと思います。いくつかのグーグルと多くの努力をした後、私はまだそれを行うことができません. ここに私が欲しいものがあります:

ここに画像の説明を入力

menu.xml ファイル:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item
    android:id="@+id/menu_first"
    android:icon="@drawable/phone_selector"
    android:title="@string/first"/>

 <item
    android:id="@+id/menu_second"
    android:icon="@drawable/butterfly_selector"
    android:title="@string/second"/>

 <item
    android:id="@+id/menu_third"
    android:icon="@drawable/umbrella_selector"
    android:title="@string/third"/>
</menu>

OptionsMenuActivity.java:

public class OptionsMenuActivity extends Activity {

private Menu currentMenu;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.layout.menu, menu);
    this.currentMenu = menu;

    return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    setMenuItemIconState(menu, MyApplication.getSelectedMenuItemDrawIcon(), false);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_phone:
        setMenuItemIconState(currentMenu, MyApplication.getSelectedMenuItemDrawIcon(), true);
        MyApplication.setSelectedMenuItemDrawIcon(R.drawable.phone_active);
        Intent intent = new Intent(OptionsMenuActivity.this, FirstActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        return true;

    case R.id.menu_butterfly:
        setMenuItemIconState(currentMenu, MyApplication.getSelectedMenuItemDrawIcon(), true);
        MyApplication.setSelectedMenuItemDrawIcon(R.drawable.butterfly_active);
        intent = new Intent(OptionsMenuActivity.this, SecondActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        return true;

    case R.id.menu_umbrella:
        setMenuItemIconState(currentMenu, MyApplication.getSelectedMenuItemDrawIcon(), true);
        MyApplication.setSelectedMenuItemDrawIcon(R.drawable.umbrella_active);
        intent = new Intent(OptionsMenuActivity.this, ThirdActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

private void setMenuItemIconState(Menu menu, int menuItemIconRes, boolean switchLastActiveMenuItemIcon) {
    int menuItemId = 0;
    int lastDeActiveDrawIcon = 0;
    switch (menuItemIconRes) {
        case R.drawable.phone_active:
            menuItemId = R.id.menu_first;
            lastDeActiveDrawIcon = R.drawable.phone;
            break;
        case R.drawable.butterfly_active:
            menuItemId = R.id.menu_second;
            lastDeActiveDrawIcon = R.drawable.butterfly;
            break;
        case R.drawable.umbrella_active:
            menuItemId = R.id.menu_third;
            lastDeActiveDrawIcon = R.drawable.umbrella;
            break;
    }
    if (switchLastActiveMenuItemIcon) {
        MenuItem menuItem = menu.findItem(menuItemId);
        menuItem.setIcon(lastDeActiveDrawIcon);
        return;
    }
    MenuItem menuItem = menu.findItem(menuItemId);
    menuItem.setIcon(MyApplication.getSelectedMenuItemDrawIcon());
 }
}

MyApplication.java には、 selectedMenuItemDrawIconの getter と setter しかありません。アイコンを適切に設定することはできましたが、他のアイコンは失敗しました。

そのようなオプションメニューをカスタマイズすることは可能ですか? そうでない場合、xml ファイルを作成し、android の基本メニューのようにスムーズに表示および非表示にする方法は他にありますか?

どんな助けでも大歓迎です。よろしくお願いします(コード例を提供してください)。

4

0 に答える 0