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?
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:
@inazaruk gave the answer well enough but since the recent updates, ADT 18 and above
, there are some restrictions on the styles
giving the error
Error retrieving parent for item: No resource found that matches the given name '@android:style/Widget.TextView.ListSeparator'.
See this link for reason of the problem and the solution. Since this post doesn't provide a code for understanding i am providing my code here
<style name="Widget.TextView.ListSeparator" parent="@android:style/Widget.TextView"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textStyle">bold</item> <item name="android:textSize">14sp</item> <item name="android:gravity">center_vertical</item> </style> <style name="PreferenceListHeader" parent="Widget.TextView.ListSeparator"> <item name="android:textColor">#000000</item> <item name="android:textStyle">bold</item> <item name="android:textSize">18sp</item> <item name="android:background">#cccccc</item> <item name="android:paddingTop">6dp</item> <item name="android:paddingBottom">6dp</item> <item name="android:paddingLeft">12dp</item> </style> <style name="PreferenceScreen" parent="android:Theme.NoTitleBar"> <item name="android:listSeparatorTextViewStyle">@style/PreferenceListHeader</item> <item name="android:background">#F2B1DBF3</item> </style>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With