2012-07-20 26 views
0

我已經搜索,但無法找到解決我的問題。 我需要做的是設置一個隨機主題,然後讓所有其他視圖採用這個主題。這個主題的隨機化不是問題,我知道它是在開玩笑。問題是刷新已經在堆棧中的視圖。在運行時更改主題,需要查看重畫,但它不

我在堆棧的某處調用

int theme = Constants.THEMES[randomInt]; 
setTheme(theme); 

一個活動,然後調用invalidate()該活動。該活動沒有任何反應,但是當我去參加其他活動時,新主題適用。

此外,當我回到我的mainActivity我不知道如何讓View重繪。

我再打電話給

@Override 
protected void onResume() { 
    super.onResume(); 
    if(refreshNeeded){ 
     getWindow().getDecorView().findViewById(
     android.R.id.content).getRootView().invalidate(); 
    } 
} 

,但沒有。我無法弄清楚如何讓它重新繪製新的主題。

我錯過了一些明顯的東西嗎?在Button click

getApplication().setTheme(R.style.Theme_Black); 
    setTheme(R.style.Theme_Black); 
    Intent n = new Intent(activityA.this , activityB.class); 
    startactivity(n); 

回答

0

調用此它將工作。但是您必須在themes.xmlvalues文件夾中包含所有構件樣式

+0

我提到新的主題正在應用於新的活動。我遇到的問題是將其應用於當前視圖和堆棧中的其他視圖(如在用戶按下後退按鈕時)。 'getApplication()。setTheme(theme);'不會改變什麼嗎? – 2012-07-20 13:15:31

+0

此刻我唯一的選擇似乎是: '如果(refreshNeeded){'' i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);'' 意向書I = getIntent();'' startActivity(I);' '}' 不是最好的解決方案。 – 2012-07-20 15:44:28

0

請在super.onCreatesetContentView之前撥打setTheme(R.style.Theme)