Lollipop v21,Fragment Dialog 不采用我的 activity 主题

Lollipop v21, FragmentDialog doesn't take my activity theme

我的 activity 主题设置如下。

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorButtonNormal">@color/colorPrimary</item>
</style>

activity 有一个使用(Kotlin 代码)启动的简单 FragmentDialog

    MyDialogFragment().show(supportFragmentManager, MyDialogFragment.TAG)

MyDialogFragment 确实有一个按钮。因此,我希望 Button 的颜色根据主题是 colorPrimary。但是按钮的颜色(在 v21 上)只有灰色)

这适用于 Marshmallow(即 v23)而非 Lollipop(v21)。我还没有尝试过 v22。 ...所以我猜 v21 不会自动从 activity.

继承主题

对于 KitKat 及以下版本,这不适用,因为它不使用 'android:colorButtonNormal'

我应该如何让我的 FragmentDialog 获得我在 activity 上设置的主题?

我找到了一种方法,即在定义我的 activity 主题之上明确定义我的 FragmentDialog 主题,如下所示。

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorButtonNormal">@color/colorPrimary</item>
</style>

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorButtonNormal">@color/colorPrimary</item>
</style>

然后我需要在我的 FragmentDialog onCreate() 中明确设置它。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.MyDialogTheme)
}

注意:它必须在

中提到的 onCreate 中

如果有更优雅的答案,我仍然愿意接受。