在Android 2.3.3或4.2上以编程方式设置时,半透明主题不起作用

我有两个活动:

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View view) { Intent intent= new Intent(this, TranslucentActivity.class); startActivity(intent); } } public class TranslucentActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { this.setTheme(android.R.style.Theme_Translucent); super.onCreate(savedInstanceState); setContentView(R.layout.activity_translucent); } } 

布局activity_main

  

布局activity_translucent

    

表现

              

当我点击MainActivity中的按钮时,它会以透明背景启动TranslucentActivity。 在平台4.0.3上的android模拟器中看起来都很好但是在其他平台上,例如2.3.3或4.2,我得到黑色背景而不是透明。 可能有什么不对?

PS我不想使用manifest来声明活动的主题。

关于setTheme()的讨论很多,或者更确切地说为什么setTheme()没有按预期工作:

这个讨论的典型特征是setTheme在清单中设置主题时效果不佳(甚至Dianne Hackborn建议使用清单方式而不是setTheme()方式,请参见上面的第三个链接)。 在定义背景时尤其如此。 遗憾的是,您在模拟器或图形布局编辑器中获得的结果不会传输到现实世界(说实际设备)。 因此,您在4.0.3仿真器中看到的内容可能与真实设备上的内容不同(正如您已经注意到的那样;-)。

如果没有特别的理由使用setTheme来主题你的Activity,那么我建议你改变你的清单:

  

您仍然可以使用setTheme来主题布局的其他元素,但在创建透明或类似对话的活动时,我还没有find任何其他有用的解决方案。