2017-02-14 2 views
0

Итак, дело в том, что я пытаюсь заставить приложение для Android иметь активность настроек для того, чтобы пользователь мог изменять некоторые функции приложения (язык, тема, ...). Моя проблема возникает, когда вы пытаетесь заставить приложение реагировать на изменение значения одного из этих предпочтений. Например, тема первая; моя идея состояла бы в том, чтобы иметь «предпочтение переключателя». Когда он будет включен, тема приложения будет Material.Light и когда выключен, материал. Для этого я должен иметь некоторый метод onValueChanged, который бы реагировал, когда переключатель изменил свое положение. Проблема здесь в том, что я не могу правильно получить экземпляр SwitchPreference в моей настройке, так как метод «findPreference (key)» устарел, и я действительно не знаю, как заставить его принять значение необходимого ключ.Реагировать на изменение активности настроек в android

Есть ли способ сделать это, или я должен изменить способ мышления для этой проблемы?

ответ

0

Вместо установки темы в onValue слушателя изменений, вы можете также сделать, как показано ниже:

1) Создать класс ThemeUtils и сделать кожух переключателя для выбора темы и установить тему для деятельности. Я создал свой собственный стиль, вы можете выбрать имя Stlye здесь

public class ThemeUtils { 
public final static int THEME_Professional = 1; 
public final static int THEME_Default = 2; 
public static void onActivityCreateSetTheme(Activity activity, int sTheme) { 
    switch (sTheme) 
    { 
    default: 
    case THEME_Professional: 
     activity.setTheme(R.style.ProfessionalTheme); 
     break; 
    case THEME_Default: 
     activity.setTheme(R.style.DefaultTheme); 
     break; 
    } 
} 

}

2) В методе OnCreate деятельности, вызовите setTheme метод

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setTheme(); 
    } 

3) Получает пользователя выбранной темы

private void setTheme() { 
    int themeInt = getThemeValue(); 
    ThemeUtils.onActivityCreateSetTheme(this, themeInt); 
    } 

4) После получения идентификатора стиля вы можете вызвать метод класса ThemeUtils onActivityCreateSetTheme

private int getThemeValue() { 
    SharedPreferences pref =  PreferenceManager.getDefaultSharedPreferences(getContext()); 
    Boolean isGrid = pref.getBoolean(getString(R.string.grid_switch), false); 
    if (isGrid) { 
     return 2; 
    } else { 
     return 1; 
    } 
} 

Надеюсь, что этот вариант поможет вам !!!

+0

Я пытаюсь реализовать код, посмотреть, как он работает и посмотреть, выполнит ли он работу, но я получаю сообщение об ошибке; что соответствует «R.string.grid_switch»? –

+0

Это ключ предпочтения переключателя. – kavita

+0

В любом случае, если я правильно понимаю код (возможно, что я не ... XD), это решает половину проблемы. Дело в том, что здесь вы проверяете выбранную тему на методе onCreate Activity. В этом случае необходимо будет уничтожить деятельность и воссоздать ее, чтобы изменения были активными. Для меня оптимальным решением было бы получить изменения сразу после того, как переключатель изменит свое положение. Тем не менее, если это невозможно, я могу положить что-то вроде «изменения вступят в силу после перезапуска приложения», - продолжается после - –

Смежные вопросы