Styling custom dialog fragment not working

萝らか妹 提交于 2019-12-20 14:42:17

问题


I'm trying to style all my dialog fragments to look the same in my app. The dialogs coming from my settings fragment are styled exactly the way I want it. For my custom dialog fragments, the style is similar but not exactly the same. For some reason the spinner, timepicker, datepicker, radiobuttons, and edittext widgets inside my custom dialog fragments don't pick up the same style. In fact, the widgets blend in with the white background and you can't see that they are there. What am I doing wrong?

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"/>

<style name="Theme.Base" parent="AppTheme">
    <item name="colorPrimary">@color/PrimaryBackgroundColor</item>
    <item name="colorPrimaryDark">@color/SecondaryBackgroundColor</item>
    <item name="colorAccent">@color/ColorBackgroundAccent</item>
    <item name="android:textColorPrimary">@color/PrimaryTextColor</item>
    <item name="android:alertDialogTheme">@style/AppTheme.DialogStyle</item>
</style>
    <style name="AppTheme.DialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColorPrimary">@color/PrimaryBackgroundColor</item>
    <item name="colorAccent">@color/ColorBackgroundAccent</item>
</style>

I'm applying the theme to my custom dialog fragment like this:

 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_DialogStyle);

My settings dialog looks like this (Exactly how I want it):

Settings Dialog Fragment

My custom dialog fragment looks like this:

Custom Dialog Fragment

As you can see, the radio button selected color red and you can't see the unselected radio button.


回答1:


Finally got an answer!!!

It's an issue or bug with AppCompat 22+. Check out link here

Apparently this was a bug with fragments and widgets weren't getting the material themed in a fragment. It seems they fixed this issue, but the issue still holds in a dialog fragment based on what I'm going through. The problem comes when you use the inflater instance passed to Fragment#onCreateView(). The workaround for now is to instead used the LayoutInflater from getActivity().getLayoutInflater() according to google.

So I changed my code to:

View view = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);

from:

View view = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.dialoge, null);

All my widgets are now themed. Thanks everyone. Hopes this helps someone else.




回答2:


I believe you need to set the theme on the actual Dialog and not the Fragment

Use this constructor to create your AlertDialog:

AlertDialog.Builder(Context context, int theme)

ie

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), theme)



回答3:


I think you need to add one more item in style of your dialog. android:textColorSecondary will show color of un selected checkbox.

in your style add it.

</style>
    <style name="AppTheme.DialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColorPrimary">@color/PrimaryBackgroundColor</item>
    <item name="colorAccent">@color/ColorBackgroundAccent</item>
     <item name="android:textColorSecondary">#000000</item>
</style>

It will make un Checked checkbox or toggle button edge color black. you need to change #000000 to color your want to show.




回答4:


See if this helps - Android appcompat-v7:21.0.0 change material checkbox colors

In short, try setting android:textColorSecondary.



来源:https://stackoverflow.com/questions/32784009/styling-custom-dialog-fragment-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!