Question

I have created nested preferenceScreens.I want to add custom font to preferenceScreen title and summary. I try to use font which loaded to typeface. How can i do this? thanks.

here is my preference.xml :

   <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory android:title="@string/manage_device_title" 
         android:key="@string/device_category">
             <PreferenceScreen android:title="@string/manage_device"
                 android:key="@string/manage_device_KEY"
                 android:summary="@string/device_summary" >     
             </PreferenceScreen>
        </PreferenceCategory>
   </PreferenceScreen>
Was it helpful?

Solution

You need to create CustomPreference and CustomPreferenceCategory for that. Include that CustomPreference and CustomPreferenceCategory in your preference.xml

CustomPreference:

public class CustomPreference extends Preference {
Typeface fontStyle;

public CustomPreference(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

}

public CustomPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomPreference(Context context) {
    super(context);
}

@Override
protected void onBindView(View view) {
    super.onBindView(view);

    fontStyle = Typeface.createFromAsset(CA.getApplication().getApplicationContext().getAssets(), AppConstants.fontStyle);
    TextView titleView = (TextView) view.findViewById(android.R.id.title);
    titleView.setTypeface(fontStyle);   
    titleView.setTextColor(Color.RED);
    TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
    summaryView.setTypeface(fontStyle); 
    summaryView.setTextColor(Color.RED);
    }
}

CustomPreferenceCategory:

 public class CustomPreferenceCategory extends PreferenceCategory {
Typeface fontStyle;

public CustomPreferenceCategory(Context context, AttributeSet attrs,
        int defStyle) {
    super(context, attrs, defStyle);

}

public CustomPreferenceCategory(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomPreferenceCategory(Context context) {
    super(context);
}

@Override
protected void onBindView(View view) {
    super.onBindView(view);

    fontStyle = Typeface.createFromAsset(CA.getApplication()
            .getApplicationContext().getAssets(), AppConstants.fontStyle);
    TextView titleView = (TextView) view.findViewById(android.R.id.title);
    titleView.setTypeface(fontStyle);
    // titleView.setTextColor(Color.RED);
        }
}

In your Preference.xml you need to create PreferenceCategory and Preference with these custom classes.

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CustomPreferenceCategory android:title="@string/manage_device_title" 
     android:key="@string/device_category">
         <CustomPreference android:title="@string/manage_device"
             android:key="@string/manage_device_KEY"
             android:summary="@string/device_summary" >     
         </CustomPreference>
    </CustomPreferenceCategory>
</PreferenceScreen>

Note: Please use proper package name of CustomPerenceCategory and CustomPreference when refereing in preference.xml and for fontStyle add as per the need.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top