androidandroid-preferencespreferenceactivity

set custom font for text in PreferenceScreen


My PreferenceActivity looks like:

import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.widget.TextView;

public class Settings extends PreferenceActivity {

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
            super.onCreate(savedInstanceState);

            //setContentView(R.layout.about);

            Typeface timesFont = Typeface.createFromAsset(getAssets(), "fonts/times.ttf");

            TextView about_txt = (TextView) findViewById(R.id.about_txt);        
            about_txt.setTypeface(timesFont);
            about_txt.setText(R.string.about_txt);


            if (Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB)
            {
                addPreferencesFromResource(R.xml.preferences);
            } else {
                // Display the fragment as the main content.
                getFragmentManager().beginTransaction().replace(android.R.id.content,
                        new PrefsFragment()).commit();
            }
    }

    public static class PrefsFragment extends PreferenceFragment 
    {
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                // Load the preferences from an XML resource
                addPreferencesFromResource(R.xml.preferences);
            }
        }
}

And preference.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

        <ListPreference
            android:dialogTitle="@string/size_dialog"
            android:entries="@array/size_list"
            android:entryValues="@array/entry_size"
            android:key="size_list"
            android:summary="@string/size_summary"
            android:title="@string/pref4title"
            />

    </PreferenceCategory>

    <PreferenceCategory
        android:title="@string/pref_about"
        android:layout="@layout/about"
        >

    </PreferenceCategory>

</PreferenceScreen>

@layout/about (about.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         android:layout_width="match_parent"
         android:layout_height="match_parent"> 

          <TextView
            android:id="@+id/about_txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="some text here"   
            />

</LinearLayout>

I have specific language, so for text in about.xml I should use specific font. Regularly for TextView I use:

 Typeface timesFont = Typeface.createFromAsset(getAssets(), "fonts/times.ttf");

 TextView about_txt = (TextView) findViewById(R.id.about_txt);        
 about_txt.setTypeface(timesFont);
 about_txt.setText(R.string.about_txt);

but what I should use to access to text in about.xml which add to prefernce screen ?

Thanks in advance!


Solution

  • public class CustomPreference extends Preference 
        implements PreferenceStyle {
    
        private int style;
    
        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);
            switch (style) {
            case STYLE_ALARMED:
                setStyleAlarmed(view);
                break;
            case STYLE_NORMAL:
                setStyleNormal(view);
                break;
            case STYLE_WARNING:
                setStyleWarning(view);
                break;
            case STYLE_SUMMARY_ALARM:
                setStyleSummaryAlarm(view);
                break;
            case STYLE_SUMMARY_WARNING:
                setStyleSummaryWarning(view);
                break;
            case STYLE_DISABLED:
                setStyleDisabled(view);
                break;
            default:
                break;
            }
    
        }
    
    private void setStyleWarning(View view) {
        TextView titleView = (TextView) view.findViewById(android.R.id.title);
        titleView.setTextColor(Color.YELLOW);
                // add your FONT here
    }
    
    private void setStyleAlarmed(View view) {
        int alarmREDColor = view.getContext().getResources().getColor(R.color.alarmed_red);
        TextView titleView = (TextView) view.findViewById(android.R.id.title);
        titleView.setTextColor(alarmREDColor);
    }
    
    public void setStyle(int style) {
            switch (style) {
            case STYLE_ALARMED:
                this.style = STYLE_ALARMED;
                break;
            case STYLE_NORMAL:
                this.style = STYLE_NORMAL;
                break;
            default:
                this.style = STYLE_NORMAL;
            }
        }
    
    public interface PreferenceStyle {
    
        public static final int STYLE_DISABLED = 0;
        public static final int STYLE_NORMAL = 10;
        public static final int STYLE_ALARMED = 20;
        public static final int STYLE_WARNING = 30;
    
        public static final int STYLE_SUMMARY_ALARM = 40;
        public static final int STYLE_SUMMARY_WARNING = 50;
    
        public void setStyle(int style);
        public Context getContext();
        public void setSummary(CharSequence summary);
    
    }
    

    public class YourActivity extends PreferenceActivity {
    
        private CustomPreference pref1;
        private CustomPreference pref2;
        private CustomPreference pref3;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);         
            addPreferencesFromResource(R.xml.prefence_xml);
            pref1 = findPreference();
                        pref1.setOnPreferenceClickListener(this);
                        pref1.setStyle(PreferenceStyle.STYLE_NORMAL);
                   }
            }
    

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    
    
        <PreferenceCategory 
            android:title="category1">
    
            <com.project.main.preference.CustomPreference 
                android:key="key"
                android:title="title"
                />  
    
            <com.project.main.preference.CustomPreference 
                android:key="key"
                android:title="title"/>
    
        </PreferenceCategory>
    
    </PreferenceScreen>