2014-01-22 28 views
0

我想允许用户通过点击一个按钮来更改从整个应用主题,
所以我想知道是否有一种方法可以变化的应用主题内java代码。如何设置Android应用主题在Java中,

+0

创建一个按钮,添加一个侦听到它,并单击时它更改UI相应 – BackSlash

+0

我知道如何使一个按钮,但我不知道如何将Java代码中更改主题, –

回答

3

您可以在Context上使用setTheme()方法。

请务必注意文档中的注释 - 在实例化任何视图之前,您需要致电setTheme()

如果在应用程序打开时更改主题,则需要重新创建活动以显示所做的更改。

+0

谢谢,顺便说一下,您知道重新启动我的活动的简便方法吗? –

+1

Activity.recreate() – Adam

1
public class ThemeSwitcher extends Activity implements OnClickListener { 
    private boolean isThemeSwitch = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     if (isDefault() == false) {// Default theme defined in Style file. 
      setTheme(android.R.style.Theme_Light); 
     } 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.theme_switcher); 
     findViewById(R.id.switchTheme).setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if (v.getId() == R.id.switchTheme) { 
      switchTheme(); 
      isThemeSwitch = true; 
      finish(); 
     } 
    } 

    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
     if (isThemeSwitch) { 
      Intent intent = new Intent(this, ThemeSwitcher.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     } 

    } 

    private SharedPreferences getPreference() { 
     return getSharedPreferences("theme", 0); 
    } 

    private void switchTheme() { 
     if (isDefault()) { 
      getPreference().edit().putBoolean("theme", false).commit(); 
     } 
     else { 
      getPreference().edit().putBoolean("theme", true).commit(); 
     } 
    } 

    private boolean isDefault() { 
     boolean isDef = true; 
     isDef = getPreference().getBoolean("theme", false); 
     return isDef; 
    } 
}