带有光对话框的黑暗主题应用程序

时间:2018-01-03 23:58:36

标签: android

我试图为我的Android应用程序创建一个黑暗主题但是有轻量级对话框。到目前为止,这一直是一场噩梦,试图找出答案。

基本上,我的黑暗主题风格如下所示:

<style name="AppTheme.Dark" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/darkPrimary</item>
    <item name="colorPrimaryDark">@color/darkPrimaryDark</item>
    <item name="android:windowBackground">@color/darkPrimary</item>
    <item name="android:textColorPrimary">@color/white</item>
    <item name="android:textColorSecondary">@color/transparentWhite</item>
</style>

除AlertDialogs外,一切看起来都不错。 AlertDialogs是白色的(因为它们应该是),但我在AlertDialogs中的小部件(TextViews,EditTexts等)也是白色的。我假设AlertDialogs正在使用我主题的android:textColorPrimary样式。那么如何仅为AlertDialogs指定不同的android:textColorPrimary

我尝试将以下样式添加到我的主题中:

<item name="alertDialogTheme">@style/AlertDialogTheme</item>

然后是另一种风格:

<style name="AlertDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColorPrimary">@color/black</item>
    <item name="android:textColorSecondary">@color/black</item>
</style>

但它没有效果。我尝试了很多其他内容,例如设置样式android:textAppearanceandroid:textViewStyle。我无法得到任何工作。必须有一些简单的方法将灯光主题仅应用于以黑色文本作为主要文本的对话框,同时在应用程序中保留白色主要文本。

编辑:所以我终于按照我想要的方式开展工作,并且我会发布解决方案以防其他人遇到同样的问题。我使用像@Jeffrey建议的ContextThemeWrapper,但使用R.style.ThemeOverlay_AppCompat_Light。 但是,出于某种原因,这似乎不适用于我有自定义视图并具有EditTexts的一个对话框。由于某种原因,EditTexts没有被设置样式,所以我必须将主题应用于自定义视图的布局xml中的root属性:

android:theme="@style/ThemeOverlay.AppCompat.Light"

1 个答案:

答案 0 :(得分:1)

您是否尝试在ContextThemeWrapper中传递主题?

AlertDialog.Builder builder = 
  new AlertDialog.Builder(
    new ContextThemeWrapper(this, R.style.AlertDialogTheme));

以下是警告对话框的布局:

  

https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/layout/alert_dialog.xml

您可以看到消息文本视图使用style="android:attr/textAppearanceMedium"。您是否尝试在对话框样式中重新定义它?例如,

<item name="android:textAppearanceMedium">@style/MyTextAppearanc‌​e.Medium</item>