2016-07-31 32 views
0

Ich habe mein Aktivitätsthema wie folgt festgelegt.Lollipop v21, FragmentDialog nimmt nicht mein Aktivitätsthema

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

Die Aktivität hat eine einfache FragmentDialog, die mit gestartet wird (Kotlin Code)

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

Die MyDialogFragment einen Button haben. Daher erwarte ich, dass die Farbe des Buttons colorPrimary gemäß dem Thema ist. Die Farbe der Schaltfläche (auf v21) ist jedoch nur grau)

Dies funktioniert auf Marshmallow (d. H. V23) und nicht auf Lollipop (v21). Ich habe v22 nicht ausprobiert. ... Ich denke also, dass die v21 das Thema nicht automatisch von der Aktivität übernimmt.

Für KitKat und unten, gilt dies nicht, da es nicht verwenden ‚android: colorButtonNormal‘

Wie soll ich meine FragmentDialog das Thema bekommen bekommen, dass ich auf meine Tätigkeit eingestellt?

Antwort

0

Ich habe einen Weg gefunden, dies zu tun, nämlich mein FragmentDialog-Thema wie unten definiert zu definieren, zusätzlich zur Definition meines Aktivitätsthemas.

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

Dann muss ich es explizit von meinem FragmentDialog onCreate() festlegen.

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

Hinweis: Es hat in onCreate zu sein, wie in https://stackoverflow.com/a/26582301/3286489

erwähnte ich elegantere Antwort auf noch offen bin, wenn jeder da draußen gibt.