首页 > 解决方案 > 带有偏好的 Osmdroid 夜间模式

问题描述

所以我想制作一个 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;
            }
        });




    }
}

标签: javaosmdroidpreferencescreen

解决方案


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

R.id 返回整数,而不是字符串。

这里:

public boolean onPreferenceChange(Preference preference, Object newValue)

你可以这样做:

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

然后只是:

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

推荐阅读