@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_create: //run NoteActivity in new note mode
startActivity(new Intent(this, NoteActivity.class));
break;
case R.id.action_theme:
setTheme(R.style.Theme2);
setContentView(R.layout.activity_main);
Intent i = getIntent();
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
// TODO: show settings activity
break;
}
return super.onOptionsItemSelected(item);
}
Ich habe einen Menüpunkt oben auf meiner Aktivität. Ich möchte es verwenden, um das Thema zu ändern, wenn es gedrückt wird. Ich möchte dies tun, nachdem der Benutzer das Programm gestartet hat, und es wird schließlich verwendet, um durch eine Reihe von verschiedenen Themen zu fahren! Gerade jetzt möchte ich es nur mit einem arbeiten lassen. Wie kann ich das machen?Ändern Sie das Thema programmgesteuert nach onCreate()
Meine Antwort
Hauptaktivität
SharedPreferences pref;
SharedPreferences.Editor editor;
int check;
int newcheck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pref = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
check = pref.getInt("x", 0);
if(check == 0){
setTheme(R.style.AppTheme);
}else{
setTheme(R.style.Theme2);
}
setContentView(R.layout.activity_main);
noteActivity = new NoteActivity();
mListNotes = (ListView) findViewById(R.id.main_listview);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_create: //run NoteActivity in new note mode
startActivity(new Intent(this, NoteActivity.class));
break;
case R.id.action_theme:
pref = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
editor = pref.edit();
newcheck = pref.getInt("x",0);
if(newcheck == 0) {
newcheck = 1;
}else if(newcheck == 1){
newcheck = 0;
}
editor.clear();//clears the editor to avoid errors
editor.putInt("x",newcheck);//add in new int
editor.commit();//commit
//restart the activity
Intent i = getIntent();
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();//close activity - avoid crash
startActivity(i);//start activity
//TODO show settings activity
break;
}
return super.onOptionsItemSelected(item);
}
Also, was ist das Problem, mit dem Sie gerade konfrontiert sind? Das Thema ist nicht richtig eingestellt? –
Wenn ich den Knopf drücke, ändert sich das Thema nicht. Ich habe es in der onCreate() -Methode getestet, also ist das Thema richtig eingerichtet. – pewpew
Warum starten Sie die Aktivität dann wieder? Sie sollten einfach die 'setTheme' Funktion verwenden und das war's. –