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 中
如果有更优雅的答案,我仍然愿意接受。
我的 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 中如果有更优雅的答案,我仍然愿意接受。