8

我正在使用主题来自定义设置对话框的外观。首选项在 XML 中定义并由PreferenceFragment. 附加片段的方式基本如开发者指南中所述。

通过应用于托管活动的自定义主题自定义第一个屏幕,它完全可以正常工作:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.Theme_Preferences_Dialog);
    ...

搭配风格:

<style name="Theme.Preferences.Dialog" parent="@android:style/Theme.Holo.Light.Dialog">
    <item name="android:colorBackground">#fff0f0f0</item>
    <item name="android:background">#fff0f0f0</item>
    <item name="android:divider">#ffe0e0e0</item>
    <item name="android:textColorPrimary">#ff555555</item>
    <item name="android:textColorSecondary">#ff808080</item>
    <item name="android:textAppearanceLarge">@style/preferences_large_text</item>
    <item name="android:textAppearanceMedium">@style/preferences_medium_text</item>
</style>

一些首选项定义如下:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/pref_title" >
...
<ListPreference
    android:enabled="false"
    android:key="@string/pref_change_workspace_key"
    android:persistent="true"
    android:summary="@string/pref_change_workspace_summary_singel"
    android:title="@string/pref_change_workspace_title" />
...
</PreferenceScreen>

问题是所有打开对话框的首选项(如 a ListPreference)的样式与对话框的其余部分不同。

设置片段的第一级看起来不错:

设置第一级

但是单击其中一个元素会产生错误的结果:

设置二级

4

4 回答 4

5

值 => 样式.xml

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:dialogTheme">@style/MyDialogStyle</item>
        <item name="android:alertDialogTheme">@style/MyDialogStyle</item>

    </style>


    <style name="MyDialogStyle" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

</resources>

值-v21 => 样式.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:dialogTheme">@style/MyDialogStyle</item>
    <item name="android:alertDialogTheme">@style/MyDialogStyle</item>

</style>


<style name="MyDialogStyle" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:background">#fff0f0f0</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

于 2015-04-03T11:48:38.990 回答
4

和 windowbackground 属性为透明

<item name="android:windowBackground">@android:color/transparent</item>
于 2013-08-27T03:04:24.660 回答
2

上面看到的问题来自该行

<item name="android:background">#fff0f0f0</item>

在定义的样式中。显然,此设置也用于生成的对话框。删除此行会产生预期的结果。

于 2013-08-28T03:55:57.397 回答
2

您应该尝试将样式属性覆盖android:alertDialogTheme(支持从 开始API 11)到样式首选项对话框(不仅是首选项,而且通常也是警报对话框):

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">        
    <item name="android:alertDialogTheme">@style/Theme.MyDialog</item>
</style>

<style name="Theme.MyDialog" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
于 2015-08-06T09:06:09.170 回答