样式化自定义对话框片段不起作用

时间:2015-09-25 14:04:48

标签: android styling dialogfragment

我正在尝试将我的所有对话框片段设置为在我的应用中看起来相同。来自我的设置片段的对话框完全按照我想要的方式设置样式。对于我的自定义对话框片段,样式类似但不完全相同。出于某种原因,我的自定义对话框片段中的微调器,timepicker,datepicker,radiobuttons和edittext小部件不会选择相同的样式。事实上,小部件融入了白色背景,你无法看到它们在那里。我做错了什么?

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

我正在将主题应用于我的自定义对话框片段:

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

我的设置对话框看起来像这样(我正是我想要的):

Settings Dialog Fragment

我的自定义对话框片段如下所示:

Custom Dialog Fragment

如您所见,单选按钮选择了红色,您无法看到未选中的单选按钮。

4 个答案:

答案 0 :(得分:20)

终于得到了答案!!!

这是AppCompat 22+的问题或错误。 Check out link here

显然这是一个片段的错误,小部件没有获得片段中的主题材料。似乎他们解决了这个问题,但问题仍然存在于基于我正在经历的对话片段中。 当您使用传递给Fragment#onCreateView()的inflater实例时会出现问题。现在的解决方法是改为使用来自LayoutInflater的{​​{1}}根据谷歌。

所以我将代码更改为:

getActivity().getLayoutInflater()

从:

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

我的所有小部件现在都是主题。感谢大家。希望这有助于其他人。

答案 1 :(得分:0)

我相信你需要在实际的Dialog而不是Fragment

上设置主题

使用此构造函数创建AlertDialog:

AlertDialog.Builder(Context context, int theme)

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

答案 2 :(得分:0)

我认为您需要在对话框的样式中再添加一个项目。 android:textColorSecondary将显示未选中复选框的颜色。

以你的风格添加它。

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

它将取消选中复选框或切换按钮边缘颜色为黑色。您需要将#000000更改为要显示的颜色。

答案 3 :(得分:0)

看看这是否有帮助 - Android appcompat-v7:21.0.0 change material checkbox colors

简而言之,请尝试设置android:textColorSecondary