我的preferenceActivity是这样的:
进口android.os.Build;
进口android.os.Bundle;
。进口的Android preference preferenceActivity;
。进口的Android 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:机器人=http://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:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人: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:机器人=http://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>