Zmiana motywów/Theme w aplikacji przez użytkownika.

Wątek przeniesiony 2020-04-13 14:59 z Java przez Patryk27.

0

Witam, mam taki problem tworze aplikację planner, chce by w niej użytkownik miał do wyboru kilka motywów kolorystycznych.
Zostały już przygotowane przyciski oraz Theme w stylach.
Problem polega na tym, poniższy kod pozwala mi zmienić kolory aplikacji pod jednym przyciskiem CIEMNY lecz nie znalazłem sposobu by tą metody przenieść na inne przyciski.
Kolejnym problemem jest że kolorystyka zostaje zmieniona w oknie zmiany motywu, inne okna zostają w starszej kolorystyce

Z góry wielkie dzięki


import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.app.AppCompatDialog;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;

import java.io.BufferedReader;


public class motywy_Activity extends AppCompatActivity {

    private Switch ciemny,czerwony,niebieski,teczowy;
    SharedPref sharedPref;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        sharedPref = new SharedPref(this);

        if(sharedPref.loadNightModeState()==true){
            setTheme(R.style.ciemny_motyw);
        }
        else if(sharedPref.loadCzerwonyModeState()==true){
            setTheme(R.style.czerwony_motyw);
        }
        else if(sharedPref.loadNiebieskiModeState()==true){
            setTheme(R.style.AppTheme);
        }
        else if(sharedPref.loadTeczowyModeState()==true){
            setTheme(R.style.teczowy_motyw);
        }
        else {
            setTheme(R.style.AppTheme);
        }




        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_motywy_);
        ciemny = (Switch) findViewById(R.id.switch4);
        czerwony = (Switch) findViewById(R.id.switch5);
        niebieski = (Switch) findViewById(R.id.switch3);
        teczowy = (Switch) findViewById(R.id.switch6);

        if(sharedPref.loadNightModeState()==true){
            ciemny.setChecked(true);
        }
        if(sharedPref.loadCzerwonyModeState()==true){
            czerwony.setChecked(true);
        }
        if(sharedPref.loadNiebieskiModeState()==true){
            niebieski.setChecked(true);
        }
        if(sharedPref.loadTeczowyModeState()==true){
            teczowy.setChecked(true);
        }

        ciemny.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                if(isChecked){
                    sharedPref.setNightModeState(true);
                    restartApp();
                }
                else {
                    sharedPref.setNightModeState(false);
                    restartApp();
                }
            }
        });

        czerwony.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){
                    sharedPref.setCzerwonyModeState(true);
                    restartApp();
                }
                else {
                    sharedPref.setCzerwonyModeState(false);
                    restartApp();
                }
            }
        });
        niebieski.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){
                    sharedPref.setNiebieskiModeState(true);
                    restartApp();
                }
                else {
                    sharedPref.setNiebieskiModeState(false);
                    restartApp();
                }
            }
        });
        teczowy.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){
                    sharedPref.setTeczowyModeState(true);
                    restartApp();
                }
                else {
                    sharedPref.setTeczowyModeState(false);
                    restartApp();
                }
            }
        });

    }


    public void restartApp(){
        Intent i = new Intent(getApplicationContext(), motywy_Activity.class);
        startActivity(i);
        finish();
    }
}

0

Problem z wprowadzeniem kilku motywów został rozwiązany.

lecz został problem z wprowadzeniem motywu do aplikacji, zmiana zostaje zachowana w danym layout a nie zostaje wprowadzona do całej aplikacji.
Ktoś ma jakieś rozwiązanie?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.