AppCompat对话框主题中标题栏颜色不正确 - Bug?

6

我有一个LoginActivity,使用了如下的AppCompat主题:

 <activity
            android:name=".LoginActivity"
            android:theme="@style/Theme.AppCompat.Light.Dialog"
            android:label="Login" />

我知道在发布这篇文章时,Google尚未将Material主题添加到DIALOGS的AppCompat库中,因此我认为它会退回到Holo。但实际上,我得到了以下结果:
请注意,我没有使用AppCompat工具栏。在Activity中,我甚至没有引用ActionBar。你看到的是默认行为,但我无法确定其来源。也许这是一个错误吗?
(此外,EditText字段没有使用应用程序的主要颜色进行着色。)

你可能错过了这个公告!AppCompat v21 - 适用于早期设备的材料设计! 我知道,截至本帖发布时,Google尚未在AppCompat库中添加Material主题。 - Paresh Mayani
@PareshMayani 对不起,我打错了,我毫不怀疑已经多次阅读了那个页面!我听说他们还没有在“对话框”中添加M.D.主题。(现在我想想,这是否适用于与“对话框”对象不同的“对话框主题”?) - TheLettuceMaster
Theme.AppCompat.Light.Dialog 绝对是扩展自 android:Theme.Material.Light.Dialog。您使用什么代码来创建对话框活动? - ianhanniballake
@ianhanniballake 不确定你的意思?除了清单中的主题外,我不尝试为标题栏设置样式。 - TheLettuceMaster
1个回答

6

注意:请查看我的最终编辑,可能是最佳解决方案

就我所知,这是一个bug。然而,我发现了一个有效的解决方法,那就是使用@style/Base.Theme.AppCompat.Light.Dialog.FixedSize。根据你的屏幕截图,我认为这对你也有用。但是,我还没有测试调色板着色。

从我的测试中可以看出,这个方法在扩展灰色边框的同时,仍然可以使用AppCompat和v21。

编辑:其中一个副作用是现在所有的对话框活动看起来都是相同的大小,这可能不适合你。另外,我还没有想出如何删除标题——requestWindowFeature和supportRequestWindowFeature与Window.FEATURE_NO_TITLE似乎会导致问题。

java.lang.RuntimeException: Unable to start activity ComponentInfo{myclass}:
android.util.AndroidRuntimeException: requestFeature() must be called before adding content

即使我之前尝试过放在super.onCreate之前或之后,但肯定是在setContentView之前。编辑#2:通过XML主题设置移除标题,由于没有标题,所以不会出现奇怪的灰色框,这意味着您可以取消FixedSize设置,对话框将像早期版本一样包裹其内容。
<style name="MyActivityDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

编辑 #3:您还可以简单地去掉灰色背景 - 这可能是最好的解决方案,因为它不需要Base前缀

<style name="MyTitledActivityDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowTitleBackgroundStyle">@android:color/transparent</item>
    <item name="windowActionBar">false</item>
</style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接