黑暗活动对话框主题不起作用

Posted

技术标签:

【中文标题】黑暗活动对话框主题不起作用【英文标题】:Dark activity dialog theme not working 【发布时间】:2018-01-15 15:20:24 【问题描述】:

我想要一个深色的活动对话框主题,所以我定义如下:

<style name="AppThemeDialogActivityDark" parent="Theme.AppCompat.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <!-- dark toolbar + dark popup menu -->
    <item name="toolbarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Dark</item>


    <!-- trying to forcefully set the background and text color -->
    <item name="android:windowBackground">@android:color/background_dark</item>
    <item name="android:textColor">@color/white</item>

    <item name="android:minWidth">320dp</item>

    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

活动:

public class FeedbackActivity extends AppCompatActivity

    @Override
    protected void onCreate(Bundle savedInstanceState)
    
        // darkTheme returns true!!!
        setTheme(MainApp.getPrefs().darkTheme() ? R.style.AppThemeDialogActivityDark : R.style.AppThemeDialogActivity);
        super.onCreate(savedInstanceState);

        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_feedback);
    

布局:

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

    <LinearLayout
        android:orientation="vertical"
        android:layout_
        android:layout_>

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_
            android:layout_
            android:background="?attr/colorPrimary"
            android:elevation="4dp"
            app:theme="?toolbarTheme"/>

        <ListView
            android:padding="12dp"
            android:id="@+id/lvFeedback"
            android:layout_
            android:layout_ />

        <ScrollView
            android:id="@+id/svFeedback"
            android:layout_
            android:layout_weight="1"
            android:layout_>

                <TextView
                    android:padding="12dp"
                    android:id="@+id/tvFeedback"
                    android:layout_
                    android:layout_ />

        </ScrollView>

        <Button
            android:padding="12dp"
            android:id="@+id/btButton"
            style="?borderlessButtonStyle"
            android:elevation="4dp"
            android:layout_
            android:layout_ />

    </LinearLayout>

</layout>

我在这里缺少什么?为什么我的活动对话框的背景是白色而不是深色???

编辑 - 有趣的细节

将视图背景设置为android:background="?android:windowBackground" 确实有效。但我必须为 ListView 和 TextView 执行此操作。这个主题属性有效意味着,主题应用正确,似乎默认背景是在对话框主题的另一个主题属性中定义的? 我的ListView 项目的主题也正确,只需使用android.R.layout.simple_list_item_1 作为布局,我不需要设置它们的背景/文本颜色,它们为深色主题正确设置了主题,但如果我不这样做,则不可见'不要像上面那样手动设置ListView 背景

【问题讨论】:

您应该检查您的 values-vxx 文件夹并查看其中的样式文件。也许对于其中一些人来说,风格与您需要的不同。此外,您应该检查您的布局文件,看看他们是否使用了您的样式文件中的任何指定样式。 这是个好主意,但我很懒惰为不同的屏幕尺寸创建特殊样式,现在检查了一下,事实并非如此 我添加了我的 xml 布局,我没有在其中手动设置任何背景颜色...而且我没有在代码中设置任何颜色,该活动是一个非常简单的活动,只有几个仅代码行 也许这种情况会失败并回退到使用AppTheneDialogActivity:setTheme(MainApp.getPrefs().darkTheme() ? R.style.AppThemeDialogActivityDark : R.style.AppThemeDialogActivity);。你检查了吗? 检查了这个,它肯定不会失败。甚至删除它并使用setTheme(R.style.AppThemeDialogActivityDark) 并进行了干净的构建,没有区别,我仍然得到白色背景 【参考方案1】:

尝试更换父母 parent="@android:style/Theme.Material.Dialog.Alert"

【讨论】:

以上是关于黑暗活动对话框主题不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Facebook评论插件黑暗模式不起作用

活动在 4.3 和 4.4.2 中不起作用

使用 viewBinding 时 SetTheme 不起作用

活动菜单类在 wordpress 中不起作用

通过外部触摸事件关闭对话框不起作用

使用对话框android时长按菜单不起作用