2014-01-22 27 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; 
    } 
}