以编程方式设置主题会导致黑色背景

7

当我运行我的安卓应用程序时,我会调用一个方法来检查该应用程序是否在平板电脑上运行,使用以下代码:

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是从父Theme.Holo.Light.Dialog继承的主题。

这个逻辑可以正常工作,但是它会在背景上产生奇怪的效果。调用意图完全被黑掉了,而如果我只是在清单中设置主题,背景只会稍微变灰。

更新-添加的代码

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

我该如何复制这个?


你是在 SetContentView() 之前执行 setTheme 吗? - kaderud
是的,我应该把它移到这之后吗?我现在正在发布我的onCreate() - kandroidj
我把代码移到了setContentView()之后,但它没有设置我的主题。我以前尝试过这个方法。如果你想要设置主题,你必须在调用setContentView()之前进行设置。我只是不明白为什么背景会完全变黑。 - kandroidj
是的,setTheme需要在SetContentView()之前执行。当我尝试在具有addPreferencesFromResource()的Activity中应用Theme.Holo.Light时,我遇到了一些非常奇怪的效果。背景全部变成黑色,但对话框却是亮色的。为什么你会出现这个错误,我恐怕无法弄清楚。我不得不在addPreferencesFromResource之前放置setTheme。 - kaderud
1个回答

13

我似乎已经找到了自己问题的答案。

为避免黑色背景:

在Android清单中将所有可能是对话框(如果是平板电脑)的活动设置为对话框主题:

然后在 onCreate 中添加此 else 语句以将其更改为非平板设备(即手机)。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接