Я работаю над приложением, в котором я хотел бы, чтобы пользователь мог выбрать из списка параметров цвета в настройках (весь код, показанный ниже). Однако, когда они делают это, это не изменяется после активности настроек. Он изменяется, когда вы покидаете деятельность (скажем, домой) и возвращаетесь. Я считаю, что это потому, что onCreate()
не вызывается, проблема в том, что если я снова сделаю setContentView
(), все приложение не отвечает. И если я делаю recreate()
Он падает из-за музыкального проигрывателя (опять код ниже). Пожалуйста, оставьте ответ, даже если вы просто подумаете, что это сработает. Заранее спасибо.Как изменить тему в настройках приложения
Код: SettingsActivity.java (также не могу получить строку изменить на этом)
public class SettingsActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String themeName = settings.getString("theme", "DarkBlue");
int theme = MyThemer.getThemeid(themeName);
if(Build.VERSION.SDK_INT > 20){
int themeDark = MyThemer.getColorPrimaryDark(themeName);
getWindow().setStatusBarColor(getResources().getColor(themeDark));
}
setTheme(theme);
addPreferencesFromResource(R.layout.settings_activity);
String themName = settings.getString("theme", "DarkBlue");
int barColor = MyThemer.getColorPrimary(themName);
LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false);
bar.setBackgroundColor(getResources().getColor(barColor));
root.addView(bar, 0); // insert at top
bar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
Код: MainActivity.java
OnCreate()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
mySetTheme();
setContentView(R.layout.activity_game_over);
setTheme()
private void mySetTheme(){
themeName = settings.getString("theme", "DarkBlue");
int theme = MyThemer.getThemeid(themeName);
setTheme(theme);
if(Build.VERSION.SDK_INT > 20){
int themeDark = MyThemer.getColorPrimaryDark(themeName);
getWindow().setStatusBarColor(getResources().getColor(themeDark));
}
}
onResume()
public void onResume(){
super.onResume();
playMusic = settings.getBoolean("playMusic", true);
if(playMusic){
backgroundMusicPlayer = new BackgroundMusicPlayer();
backgroundMusicPlayer.execute(getApplicationContext());
}
}
OnPause()
public void onPause(){
super.onPause();
if(playMusic){
backgroundMusicPlayer.cancelMusic();
backgroundMusicPlayer.cancel(true);
}
}
backgroundMusicPlayer.java
public class BackgroundMusicPlayer extends AsyncTask<Context, Void, Void>{
MediaPlayer player;
@Override
protected Void doInBackground(Context... params) {
player = MediaPlayer.create(params[0], R.raw.background);
player.setLooping(true);
player.setVolume(50,50);
player.start();
return null;
}
public void cancelMusic(){
player.stop();
player.reset();
player.release();
}
}