Переключение тем в андроиде - PullRequest
0 голосов
/ 01 октября 2019

Моя цель - дать пользователям возможность выбрать из списка доступных тем в моем приложении и сделать его постоянным, пока они не захотят изменить его снова, но я смог достичь этого лишь частично. На данный момент, когда пользователь меняет тему приложения, он изменяется и остается даже после того, как приложение свернуто и возобновлено, но когда пользователь выходит из приложения и открывает его снова, тема возвращается к настройке по умолчанию, а это не то, что мне нужно.

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

ThemeActivity.java

public class ThemeActivity extends AppCompatActivity {

public Button blackbtn,bluebtn,pinkbtn,redbtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    themeUtils.onActivityCreateSetTheme(this);
    setContentView(R.layout.activity_theme);


    blackbtn = findViewById(R.id.blackbutton);
    bluebtn = findViewById(R.id.bluebutton);
    pinkbtn = findViewById(R.id.pinkbutton);
    redbtn = findViewById(R.id.redbutton);

    blackbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            themeUtils.changeToTheme(ThemeActivity.this, themeUtils.BLACK);
        }
    });

    bluebtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            themeUtils.changeToTheme(ThemeActivity.this, themeUtils.BLUE);
        }
    });

    pinkbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            themeUtils.changeToTheme(ThemeActivity.this, themeUtils.PINK);
        }
    });

    redbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            themeUtils.changeToTheme(ThemeActivity.this, themeUtils.RED);
        }
    });

}

themeUtils.java

public class themeUtils {

private static int cTheme;
public final static int BLACK = 0;
public final static int BLUE = 1;
public final static int PINK = 2;
public final static int RED = 3;


public static void changeToTheme(Activity activity, int theme) {

    cTheme = theme;
    activity.finish();
    activity.startActivity(new Intent(activity, activity.getClass()));

}

public static void onActivityCreateSetTheme(Activity activity) {
    switch (cTheme)
    {
        default:

        case BLACK:
            activity.setTheme(R.style.BlackTheme);

            break;

        case PINK:
            activity.setTheme(R.style.pink);

            break;

        case RED:
            activity.setTheme(R.style.red);

            break;

        case BLUE:
            activity.setTheme(R.style.BlueTheme);

            break;

    }

}

1 Ответ

1 голос
/ 01 октября 2019

Самое простое решение для этого - сохранить выбранную тему в SharedPreferences . Каждый раз, когда приложение запускается, вы читаете сохраненное значение из SharedPreferences и загружаете соответствующую тему.

Чтобы написать выбранную тему

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.selected_app_theme), YOUR_APP_THEME);
editor.commit();

Чтобы прочитать сохраненное значение

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.integer.default_app_theme);
int appTheme = sharedPref.getInt(getString(R.string.selected_app_theme), defaultValue);

РЕДАКТИРОВАТЬ На основе комментария

Всякий раз, когда вы меняете тему своего приложения, вам необходимо сохранить ее в SharedPreferences. Поэтому всякий раз, когда вызывается метод changeToTheme , после изменения темы просто сохраните его в SharedPrefs. Вы можете создать метод, который сохранит тему следующим образом:

void saveThemeToSharedPrefs(int appTheme) {
    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putInt("MY_APP_THEME, appTheme);
    editor.commit();
}

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

int getAppTheme() {
    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    int defaultValue = 0    //For Black theme. Change it to whatever you want as default
    int appTheme = sharedPref.getInt("MY_APP_THEME", defaultValue);
}

//Change the theme in your starting activity
ThemeUtils.changeToTheme(activity, getAppTheme())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...