Lollipop v21,FragmentDialog并没有采取我的活动主题

时间:2016-07-31 06:58:40

标签: android android-theme android-dialogfragment

我的活动主题如下所示。

<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>

该活动有一个简单的FragmentDialog,它使用(Kotlin代码)

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

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

这适用于棉花糖(即v23)而不是棒棒糖(v21)。我还没试过v22。 ...所以我猜v21并没有自动从活动中继承主题。

对于KitKat及以下版本,这并不适用,因为它没有使用&#39; android:colorButtonNormal&#39;

我应该如何让FragmentDialog获得我在活动中设置的主题?

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,在定义我的活动主题之上,明确定义我的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)
}

注意:必须在https://stackoverflow.com/a/26582301/3286489

中提到的onCreate中

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