设置自定义字体为preferenceScreen文本自定义、文本、字体、preferenceScreen

2023-09-06 16:39:17 作者:不要见 不要贱

我的preferenceActivity是这样的:

 进口android.os.Build;
进口android.os.Bundle;
。进口的Andr​​oid preference preferenceActivity;
。进口的Andr​​oid preference preferenceFragment;
进口android.widget.TextView;

公共类设置来延长preferenceActivity {

    @燮pressWarnings(德precation)
    @覆盖
    保护无效的onCreate(包savedInstanceState)
    {
            super.onCreate(savedInstanceState);

            //setContentView(R.layout.about);

            字样timesFont = Typeface.createFromAsset(getAssets(),字体/ TIMES.TTF);

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


            如果(Build.VERSION.SDK_INT< Build.VERSION_ codeS.HONEYCOMB)
            {
                加preferencesFromResource(R.xml preferences。);
            } 其他 {
                //显示片断为主要内容。
                getFragmentManager()的BeginTransaction()代替(android.R.id.content,
                        新的prefsFragment())提交()。
            }
    }

    公共静态类prefsFragment扩展preferenceFragment
    {
            @覆盖
            公共无效的onCreate(包savedInstanceState){
                super.onCreate(savedInstanceState);

                //从XML资源负载的preferences
                加preferencesFromResource(R.xml preferences。);
            }
        }
}
 

和 preference.xml

 < preferenceScreen的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>

        <表preference
            机器人:dialogTitle =@字符串/ size_dialog
            机器人:项=@阵列/ size_list
            机器人:entryValues​​ =@阵列/ entry_size
            机器人:关键=size_list
            机器人:总结=@字符串/ size_summary
            机器人:标题=@字符串/ pref4title
            />

    < / preferenceCategory>

    < preferenceCategory
        机器人:标题=@字符串/ pref_about
        机器人:布局=@布局/约
        >

    < / preferenceCategory>

< / preferenceScreen>
 

@布局/约(about.xml):

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
         的xmlns:工具=htt​​p://schemas.android.com/tool​​s
         机器人:layout_width =match_parent
         机器人:layout_height =match_parent>

          <的TextView
            机器人:ID =@ + ID / about_txt
            机器人:layout_width =WRAP_CONTENT
            机器人:layout_height =WRAP_CONTENT
            机器人:文本=这里一些文本
            />

< / LinearLayout中>
 
如何将网页里的文字设定为自定义的字体

我有特定的语言,所以在about.xml文字我应该使用特定的字体。定期为TextView的使用:

 字样timesFont = Typeface.createFromAsset(getAssets(),字体/ TIMES.TTF);

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

但我应该用它来获取文本about.xml这增加了prefernce屏?

在此先感谢!

解决方案

 公共类定制preference扩展preference
    实现了preferenceStyle {

    私人诠释风格;

    市民自preference(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){
        超(背景下,ATTRS,defStyle);

    }

    市民自preference(上下文的背景下,ATTRS的AttributeSet){
        超(背景下,ATTRS);
    }

    市民自preference(上下文的背景下){
        超(上下文);
    }

    @覆盖
    保护无效onBindView(查看视图){
        super.onBindView(视图);
        开关(风格){
        案例STYLE_ALARMED:
            setStyleAlarmed(视图);
            打破;
        案例STYLE_NORMAL:
            setStyleNormal(视图);
            打破;
        案例STYLE_WARNING:
            setStyleWarning(视图);
            打破;
        案例STYLE_SUMMARY_ALARM:
            setStyleSummaryAlarm(视图);
            打破;
        案例STYLE_SUMMARY_WARNING:
            setStyleSummaryWarning(视图);
            打破;
        案例STYLE_DISABLED:
            setStyleDisabled(视图);
            打破;
        默认:
            打破;
        }

    }

私人无效setStyleWarning(查看视图){
    TextView的titleview的=(的TextView)view.findViewById(android.R.id.title);
    titleView.setTextColor(Color.YELLOW);
            //此处添加您FONT
}

私人无效setStyleAlarmed(查看视图){
    INT alarmREDColor = view.getContext()getResources()的getColor(R.color.alarmed_red)。
    TextView的titleview的=(的TextView)view.findViewById(android.R.id.title);
    titleView.setTextColor(alarmREDColor);
}

公共无效的setStyle(INT风格){
        开关(风格){
        案例STYLE_ALARMED:
            this.style = STYLE_ALARMED;
            打破;
        案例STYLE_NORMAL:
            this.style = STYLE_NORMAL;
            打破;
        默认:
            this.style = STYLE_NORMAL;
        }
    }

公共接口preferenceStyle {

    公共静态最终诠释STYLE_DISABLED = 0;
    公共静态最终诠释STYLE_NORMAL = 10;
    公共静态最终诠释STYLE_ALARMED = 20;
    公共静态最终诠释STYLE_WARNING = 30;

    公共静态最终诠释STYLE_SUMMARY_ALARM = 40;
    公共静态最终诠释STYLE_SUMMARY_WARNING = 50;

    公共无效的setStyle(INT风格);
    公共语境的getContext();
    公共无效setSummary(CharSequence的总结);

}
 

 公共类YourActivity扩展preferenceActivity {

    私人定制preference preF1;
    私人定制preference preF2;
    私人定制preference preF3;


    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        加preferencesFromResource(R.xml prefence_xml。);
        preF1 =找到preference();
                    pref1.setOn preferenceClickListener(本);
                    pref1.setStyle(preferenceStyle.STYLE_NORMAL);
               }
        }
 

 < preferenceScreen的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>


    < preferenceCategory
        机器人:标题=类别1>

        < com.project.main preference.Custom preference
            机器人:键=钥匙
            机器人:标题=标题
            />

        < com.project.main preference.Custom preference
            机器人:键=钥匙
            机器人:标题=标题/>

    < / preferenceCategory>

< / 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!

解决方案

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>