简体   繁体   English

如何更改图标 MenuItem android 应用程序

[英]Howto change the Icon MenuItem android app

I would like to implement a day-night mode switch in a MenuItem.我想在 MenuItem 中实现昼夜模式切换。 If the day mode is selected, a moon should be displayed, and if the night mode is selected a sun should be diplayed.如果选择白天模式,则应显示月亮,如果选择夜间模式,则应显示太阳。 I save the settings in SharedPreferences and want to load them again when starting the app.我将设置保存在 SharedPreferences 中,并希望在启动应用程序时再次加载它们。

In my MainActivity-Class i definded在我的 MainActivity-Class 我定义

  public static final String NIGHT_MODE = "night_mode";
  private boolean safedNightMode;

This is my onCreate-method for loading the SharedPreferences这是我加载 SharedPreferences 的 onCreate 方法

 protected void onCreate(Bundle savedInstanceState) {

        requireNonNull(getSupportActionBar()).setDisplayShowHomeEnabled(true);
        Objects.requireNonNull(getSupportActionBar()).setLogo(R.mipmap.logo_psc_round);
        getSupportActionBar().setDisplayUseLogoEnabled(false);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS,MODE_PRIVATE);
        safedNightMode = sharedPreferences.getBoolean(NIGHT_MODE,false);
    
        if (safedNightMode) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        } else {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        }

My onCreateOptionsMenu an my onOtionsItemSelected-method我的 onCreateOptionsMenu 和我的 onOtionsItemSelected 方法

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item_clean:
                openDialog();
                return true;
            case R.id.item_dn_switch:
                switchDayNightMode();
                return true;
            case R.id.item_recipe:
                Intent intentRecipe = new Intent(this, RecipeActivity.class);
                startActivity(intentRecipe);
                return true;
            case R.id.item_about:
                Intent intentAbout = new Intent(this, AboutActivity.class);
                startActivity(intentAbout);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

My switchDayNightMode-method will called when the item is selected选择项目时将调用我的 switchDayNightMode 方法

public void switchDayNightMode() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS,MODE_PRIVATE);
        safedNightMode = sharedPreferences.getBoolean(NIGHT_MODE,false);
        nightMode = safedNightMode;
        if (safedNightMode) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            nightMode = false;
        } else {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            nightMode = true;
        }
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(NIGHT_MODE, nightMode);
        editor.apply();
    }

My menu.xml is here.我的菜单。xml 在这里。 The relevant item is android:id="@+id/item_dn_switch".相关项目为 android:id="@+id/item_dn_switch"。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/item_clean"
        android:title="@string/txt_menu_item_counter_reset"
        android:icon="@drawable/ic_baseline_delete_forever_24"
        app:showAsAction="ifRoom"/>
    <item android:id="@+id/item_dn_switch"
        android:title="@string/txt_menu_item_dnswitch"
        android:icon="@drawable/ic_baseline_mode_night_24"
        app:showAsAction="ifRoom"/>
    <item android:id="@+id/item_recipe"
        android:title="@string/txt_menu_item_recipe"
        android:icon="@drawable/ic_baseline_list_24"
        app:showAsAction="ifRoom"/>
    <item android:id="@+id/item_about"
        android:title="@string/about"
        android:icon="@drawable/ic_baseline_contact_support_24"
        app:showAsAction="ifRoom"/>
</menu>

How can I realize that the icon is changed depending on the day-night-mode?我怎样才能意识到图标会根据日夜模式而改变?

You can change the icon to night by creating a folder with icons for the night theme.您可以通过创建带有夜间主题图标的文件夹来将图标更改为夜间。 Create this folder (click RightClick on res folder) and set values like below on screen.创建此文件夹(在 res 文件夹上单击右键)并在屏幕上设置如下值。 After creating you should move night icons to this new folder.创建后,您应该将夜间图标移动到这个新文件夹。 The icons should automatically switch to the night theme.图标应自动切换到夜间主题。

屏幕

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM