Osmdroid Night-Mode с настройками - PullRequest
0 голосов
/ 19 июня 2020

Итак, я хочу сделать CheckBoxPreference для включения ночного режима в osmdroid, но код ни к чему не приводит. Я сделал то же самое без PreferenceScreen, обычный LinearLayout с переключателем, он работал хорошо, но я хотел использовать предпочтение. Кто-нибудь знает, что не так?


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.allgemein);

        final SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.gruppen_app", Context.MODE_PRIVATE);


        @SuppressLint("ResourceType") final CheckBoxPreference night_mode = (CheckBoxPreference) findPreference(this.getResources()
                .getString(R.id.night_mode_btn));

        night_mode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                if(night_mode.isChecked()) {
                    sharedPreferences.edit().putBoolean("isChecked", true).apply();
                    map.getOverlayManager().getTilesOverlay().setColorFilter(TilesOverlay.INVERT_COLORS);
                }else{
                    sharedPreferences.edit().putBoolean("isChecked", false).apply();
                }

                return false;
            }
        });




    }
}

1 Ответ

0 голосов
/ 19 июня 2020
@SuppressLint("ResourceType") final CheckBoxPreference night_mode = (CheckBoxPreference) findPreference(this.getResources()
                .getString(R.id.night_mode_btn));

R.id возвращает int, а не строку.

Здесь:

public boolean onPreferenceChange(Preference preference, Object newValue)

вы можете сделать это:

boolean isChecked = Boolean.parseBoolean(String.valueOf(newValue));

а потом просто:

sharedPreferences.edit().putBoolean("isChecked", isChecked).apply();
...