Custom PreferenceCategory Headings
android, android-layout, android-preferences, preferenceactivity
Solution
You should take a look at `Preference.Category` style:
<style name="Preference.Category">
<item name="android:layout">@android:layout/preference_category</item>
<item name="android:shouldDisableView">false</item>
<item name="android:selectable">false</item>
</style>
Let's take a look at `preference_category.xml` file:
<!-- Layout used for PreferenceCategory in a PreferenceActivity. -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/listSeparatorTextViewStyle"
android:id="@+android:id/title"
/>
So you need to create custom theme that extends default android `Theme` and override `listSeparatorTextViewStyle` value with `ListHeader` style. And then apply this theme to Activity that extends `PreferenceActivity` .
Here is how you can do it.
First, in your `styles.xml` add next code:
<style name="PreferenceListHeader"
parent="@android:style/Widget.TextView.ListSeparator">
<item name="android:textColor">#000000</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">12sp</item>
<item name="android:background">#cccccc</item>
<item name="android:paddingTop">6px</item>
<item name="android:paddingBottom">6px</item>
<item name="android:paddingLeft">12px</item>
</style>
<style name="Theme.Custom" parent="@android:style/Theme">
<item name="android:listSeparatorTextViewStyle">@style/PreferenceListHeader</item>
</style>
Then in your `AndroidManifest.xml` add theme to your preference acitivity:
<activity android:name=".MyPreferencesActivity"
android:theme="@style/Theme.Custom"
... >
...
</activity>
Here is a screenshot:
Problem
I have a simple preference screen defined like this ``` <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Security"> <CheckBoxPreference android:title="Require Pin on Start" android:summary="Require pin to run the application" android:key="@string/pref_require_pin" android:defaultValue="false" /> </PreferenceCategory> <PreferenceCategory android:title="Settings"> <ListPreference android:title="History Age (in days)" android:summary="Display items up to 30 days old" android:key="@string/pref_history_days" android:defaultValue="30" android:entries="@array/days_list" android:entryValues="@array/days_list" android:dialogTitle="Select History Age"/> </PreferenceCategory> </PreferenceScreen> ``` I have a style setup already and used elsewhere in my app. ``` <style name="ListHeader"> <item name="android:textColor">#000000</item> <item name="android:textStyle">bold</item> <item name="android:textSize">12sp</item> <item name="android:background">#cccccc</item> <item name="android:paddingTop">6px</item> <item name="android:paddingBottom">6px</item> <item name="android:paddingLeft">12px</item> </style> ``` and here is my activity ``` public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.preferences); } } ``` How do I apply my custom style to the `PreferenceCategory` heading?