2012-11-06 19 views
6

當我跑我打電話的方法來檢查,如果應用程序正在在平板電腦上使用運行我的Android應用程序:設置主題Programmactically原因黑色背景

public boolean isTablet(Context context){ 
    boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4); 
    boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)== Configuration.SCREENLAYOUT_SIZE_MASK); 
    return(xlarge || large); 
} 

如果該方法返回true(即該設備滿足這些條件之一)

我通過設置我的主題,對話主題:

setTheme(R.style.MyTheme); 

其中MyTheme是從父繼承主題

這個邏輯工作正常,但它在後臺給我一個奇怪的效果。呼叫意圖完全變黑,而如果我只是在清單中設置主題,背景只會略微變灰。

更新 - 代碼添加

private Context mClassContext = this; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    if(isTablet(mClassContext)){ 
     setTheme(R.style.MyTheme); 
    } 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myLayout); 
} 

如何複製呢?

+0

你在'SetTheme'之前'SetContentView()'? – kaderud

+0

是的,我應該把它移到這之後嗎?我現在發佈我的'onCreate()' –

+0

我把代碼移到了'setContentView()'之後,它沒有設置我的主題。我之前嘗試過。如果你想要設置主題,你必須在調用'setContentView()'之前完成它。我只是不明白爲什麼背景完全變黑。 –

回答

10

我似乎找到了我自己的問題的答案。

爲了避免黑色背景:

在Android清單集所有的活動,可能是對話(如果是平板電腦)的對話主題:

然後onCreate加這種情況下更改爲非平板設備(即電話)

if(isTablet(mContext)){ 
setTheme(R.style.myDialogTheme);} 
else{ 
    setTheme(R.style.MyTheme); 
}