为xml上的对话框显示的活动的透明背景设置不适用于所有设备

时间:2014-01-18 02:08:34

标签: android android-styles android-background

我有一个显示为对话框的活动的自定义视图。 我将自定义主题应用到我的活动中,因此其父级是:“@ android:style / Theme.Dialog”,我将窗口背景更改为透明。

我的Manifest.xml:

<activity android:name="com.rev.revcorder.ui.UserAuthenticationDialogActivity" android:screenOrientation="portrait"
            android:theme="@style/userAuthenticationDialog">
</activity>

我的styles.xml:

<style name="userAuthenticationDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

问题是它在我的设备上运行正常(运行4.4的Nexus 4),但在与我的相同的其他设备上运行(Nexus 4运行4.4)则不然。相反,背景显示为黑色而不透明。

只有在我通过添加:

进行语法设置时才有用
getWindow().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00000000")));

我的问题是,在我的xml风格上设置窗口背景和在语法上进行操作之间有什么区别? 另外,它是如何在我的设备上工作而不是在另一台设备上?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

在样式中再添加2个属性,如下面的代码:

<style name="userAuthenticationDialog" parent="@android:style/Theme.Dialog">
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:backgroundDimEnabled">true</item>
  <item name="android:windowIsTranslucent">true</item>
</style>

答案 1 :(得分:1)

您可以为所有设备制作Custom Theme

例如,这里是自定义主题的声明,它只是标准平台的默认灯光主题。它将放在res/values下的XML文件中(通常为res/values/styles.xml):

<style name="LightThemeSelector" parent="android:Theme.Light">
...
</style>

要在Android 3.0 (API Level 11) or higher上运行应用程序时使此主题使用较新的全息主题,您可以在res/values-v11的XML文件中放置主题的替代声明,但将父主题设为全息主题:

<style name="LightThemeSelector" parent="android:Theme.Holo.Light">
...

现在像使用其他任何一样使用此主题,如果在Android 3.0或更高版本上运行,您的应用程序将自动切换到全息主题。

有关根据平台版本或其他设备配置提供替代资源(例如themes and layouts)的详细信息,请参阅Providing Resources文档。

在下图中显示如何构建资源。

enter image description here

<强>更新

同时尝试此操作,将Theme设置为manifest.xml

android:theme="@android:style/Theme.Translucent.NoTitleBar"