Как изменить фон всех действий с помощью preferenceChange? - PullRequest
1 голос
/ 07 июля 2019

У меня есть флажок в моей активности настройки Android.Я хочу изменить цвет фона всех действий моего приложения с изменением значения preferenceCheckBox.

мой код:

SettingsFragment.java

public class SettingsFragment extends PreferenceFragmentCompat {
    private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;
    @Override
    public void onCreatePreferences(Bundle bundle, String s) {
        addPreferencesFromResource(R.xml.preference);

        preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                if( key.equals("pref_light")){
                    Preference p = findPreference(key);
                    //i don't know how to change the background with the provided change !
                }
            }
        };

    }

МОЙ ВОПРОС Я хочу узнать, как изменить фон всех действий с изменением предпочтений, которое я слушал.Предположим, у меня есть только одно основное действие и одно действие настройки.

Ответы [ 3 ]

0 голосов
/ 07 июля 2019

Вы не можете получить доступ ко всем представлениям в вашем приложении из одного фрагмента. Однако вы можете переопределить метод onResume () в своей деятельности. Внутри вы можете проверить настройки и установить нужный фон.

@Override  
protected void onResume() {  
    super.onResume();  
    SharedPreferences pref = getSharedPreferences("MyPref", Context.MODE_PRIVATE);
    Boolean backgroundFlag = pref.getBoolean("pref_light", true);
    View rootView = findViewById(R.id.your_view_id);
    if (backgroundFlag) {
        rootView.setBackground(someColor);
    } else {
        rootView.setBackground(someOtherColor);
    }
}  
0 голосов
/ 11 июля 2019

Сохранить ваши предпочтения из фрагмента, как,

 SharedPreferences prefs = getSharedPreferences("Pref", Context.MODE_PRIVATE);
 prefs.edit().putBoolean("pref_light",true).apply();

Следующий код предназначен для применения изменения цвета фона для всех действий. Вы можете создать BaseActivity и onResume BaseActivity, вы можете изменить фон для всех действий.

public class BaseActivity extends AppCompatActivity {
 @Override
    protected void onResume() {
        super.onResume();
        SharedPreferences pref = getSharedPreferences("Pref", Context.MODE_PRIVATE);
        Boolean isChecked = pref.getBoolean("pref_light", true);
        View rootView = getWindow().getDecorView().getRootView();

        if (isChecked) {
             rootView.setBackground(bgColor);
        } else {
             rootView.setBackground(bgOtherColor);
        }

    }

}

Тогда вместо того, чтобы делать

public class MainActivity extends AppCompatActivity {
}

нравится

public class MainActivity extends BaseActivity {
}

Для всех видов деятельности

0 голосов
/ 07 июля 2019

Обратите внимание, что по умолчанию PreferenceFragmentCompat сохраняет значения в объекте с именем SharedPreferences, который доступен в любом месте вашего приложения. Подробности здесь: https://developer.android.com/guide/topics/ui/settings

Таким образом, вы можете сделать это в любом месте вашего приложения:

SharedPreferences sharedPreferences =
    PreferenceManager.getDefaultSharedPreferences(this);
boolean isChecked = sharedPreferences.getBoolean(“pref_light”, "");
...