>source

MenuItem에서 주야간 모드 스위치를 구현하고 싶습니다. 주간 모드를 선택하면 달이 표시되어야 하고, 야간 모드를 선택하면 태양이 표시되어야 합니다. SharedPreferences에 설정을 저장하고 앱을 시작할 때 다시 로드하고 싶습니다.

내 MainActivity-Class에서 내가 정의한

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

이것은 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);
        }

내 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);
        }
    }

항목이 선택되면 내 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();
    }

내 menu.xml이 여기에 있습니다. 해당 항목은 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>

주간-야간 모드에 따라 아이콘이 바뀌는 것을 어떻게 알 수 있나요?

  • 이전 node.js : pg_try_advisory_lock 및 pg_advisory_unlock은 항상 false를 반환합니다.
  • 다음 YAML 사양이 콜론 뒤에 공백을 요구하는 이유는 무엇입니까?