我的活动主题如下所示。
<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获得我在活动中设置的主题?
答案 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中如果有任何答案,我仍然愿意接受更优雅的答案。