1

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

我的清单.xml:

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

我的样式.xml:

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

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

只有当我通过添加语法来设置它时它才有效:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00000000")));

我的问题是,在我的 xml 样式上设置窗口背景和在语法上做 i 有什么区别?另外,为什么它在我的设备上运行而不是在另一台相同的设备上运行?

谢谢你的帮助

4

2 回答 2

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>
于 2014-01-18T05:30:36.853 回答
1

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

例如,这里是一个自定义主题的声明,它只是标准平台默认的浅色主题。它将进入res/values(通常res/values/styles.xml)下的 XML 文件中:

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

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

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

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

有关themes and layouts根据平台版本或其他设备配置提供替代资源的更多信息,请参阅提供资源文档。

显示下图如何构建资源。

在此处输入图像描述

更新:

也试试这个,在下面设置Theme到 manifest.xml

android:theme="@android:style/Theme.Translucent.NoTitleBar"
于 2014-01-18T04:06:39.777 回答