PreferenceResource中各个组件的介绍。
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将该布局作为activity(或者fragement)的主布局
addPreferencesFromResource(R.xml.preferences);
}
...
}
//将PreferenceFragment挂载到activity中
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 将fragement作为activity的content布局
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
xml属性
值的含义
android : defaultValue
默认初始值
android : icon
显示图标
android : key
保存到SharePreference文件(key-value)中的key
android : summary
内容描述
android : title
标题
android : enabled
该偏好是否可用(默认为true)不可用时为灰色
android : order
排列的优先顺序(值小的排在前面,最小值为0)
android : iconSpaceReserved
没有图标时是否保留图标的位置(默认为false)
android : layout
偏好的布局(很少使用到,一般用widgetlayout)
android : persistent
是否自动储存偏好的值(默认为true)
android : recycleEnabled
是否可重复使用(如在ListView中)
android : selectable
是否可供选择
android : singleLineTitle
标题是否设置为单行(默认为true))
android : widgetLayout
偏好的view布局(可以引用theme中的布局)
android : dependency
该偏好依赖的其他偏好的Key值
xml属性
值的含义
android : dialogIcon
点击时弹出的对话框的图标
android : dialogLayout
点击时弹出的对话框的布局
android : dialogMessage
点击时弹出的弹出的对话框的描述文字
android : dialogTitle
点击时弹出的对话框的标题
android : negativeButtonText
点击时弹出的对话框的取消按钮的文字
android : positiveButtonText
点击时弹出的对话框的确定按钮的文字
xml属性
值的含义
android : orderingFromXml
组的优先顺序
作用:
1.作为根节点 在Preference的xml文件中
2.当嵌套在Preferenced的xml中时,可嵌套形成二级设置页面,作为开启第二屏的节点
1.设置android:layout="@layout.name"
替换布局
2.自定义MyPreferenceCategory类继承于PreferenceCategory
//1.在res/styles中自定义属性
<declare-styleable name="MyPreferenceCategory">
<attr name="title" format="string"/>//title用作设置标题
<attr name="color" format="color"/> //color 用作设置背景颜色
</declare-styleable>
//2.自定义类
public class MyPreferenceCategory extends PreferenceCategory {
private String title;
private int color;
public MyPreferenceCategory(Context context, AttributeSet attrs) {
super(context, attrs);
//将自定义的Layout资源设为它的布局
setLayoutResource(R.layout.mypreference_category);
//从xml文件中获取属性值
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyPreferenceCategory);
try {
//R.styleable.name为自定的属性,需在style中定义
title = typedArray.getString(R.styleable.MyPreferenceCategory_title);
color = typedArray.getColor(R.styleable.MyPreferenceCategory_color, context.getResources().getColor(R.color.colorPrimary));
} finally {
typedArray.recycle();
}
}
//将自定义的属性赋值给布局中view
@Override
protected void onBindView(View view) {
super.onBindView(view);
TextView textView = (TextView) view.findViewById(R.id.title);
View divider = view.findViewById(R.id.divider);
textView.setText(title);
divider.setBackgroundColor(color);
}
}
//3.在res/xml/preference.xml布局文件中引用自定义的MyPreferenceCategory
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.example.wendy.myapplication">
<!--注意自定义属性的命名空间后缀为包名全称-->
<com.example.wendy.myapplication.MyPreferenceCategory
custom:title = "Custom PreferenceCategory"
custom:color = "@color/colorDivider">
<CheckBoxPreference
android:defaultValue="true"
android:icon="@drawable/color"
android:key="check_pref"
android:selectable="true"
android:summaryOff="off"
android:summaryOn="on"
android:title="CheckBoxPreference"/>
</com.example.wendy.myapplication.MyPreferenceCategory>
xml属性
值的含义
android : summaryOff
未选择时的偏好描述
android : summaryOn
选择时的偏好描述
android:disableDependentsState
偏好未选择时需要依赖他的其他偏好处是否处于可用状态(默认为false)
xml属性
值的含义
android : summaryOff
未选择时的偏好描述
android : summaryOn
选择时的偏好描述
android:disableDependentsState
偏好未选择时需要依赖他的其他偏好处是否处于可用状态(默认为false)
android : switchTextOn
选择switchOn时的文本
android : switchTextOff
选择switchOff时的文本
xml属性
值的含义
android:entries
list中的序列(指向一个array)
android:entryValues
list中每个entry对应的值 既在sharePreference中(key-value)中的value
xml属性
值的含义
android:entries
list中的序列(指向一个array)
android:entryValues
list中每个entry对应的值 既在sharePreference中(key-value)中的value
xml属性
值的含义
android:ringtoneType
铃声类别
android:showDefault
默认铃声
android:showSilent
静音
a.在preferences.xml中增加intent子元素
<CheckBoxPreference
android:defaultValue="true"
android:key="checked_key"
android:summaryOn="Show a summary for each link"
android:title="Show Summaries">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.example.wendy.preference"
android:targetClass="com.example.wendy.preference.Main2Activity"/>
</CheckBoxPreference>
b.在preferenceAcitivity中Override onpreferenceTreeClick方法
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
return false; //返回false才能实现点击跳转
}
以上是Preference的xml描述,那么在程序中我们只需要新建一个继承自PreferenceActivity的 Activity,然后在主程序中调用就可以了。Preference中的设置存储是完全自动的,不需要再用代码去实现设置的存储,PreferenceActivity创建后系统会自动创建一个配置文件, /data/data/your_package_name /shared_prefs/(your_package_name)_preferences.xml。自动生成的配置文件如下:
<?xml version ='1.0' encoding ='utf-8' standalone ='yes' ?>
<map>
<string name ="EditTextPreference" >12332312</string>
<string name ="ListPreference" >2</string>
<string name ="RingtonePreference" >content://media/internal/audio/media/10</string>
<boolean name ="CheckBox1" value ="true" />
<boolean name ="CheckBox2" value ="true" />
</map>
文件中的name属性对应xml文件中的key属性表示某一个设置项,值是唯一的,value以及string中间的值表示设置项的具体值。
//获得默认的Preference.xml文件
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String text = sharedPreferences.getString("edit_pref", "null");//取得Key值对应的Value
Preference的变化监听接口:(当用户改变Preference的选择时,会触发系统调动回调接口)
//创建一个OnSharedPreferenceChangeListener实例,并实现方法逻辑
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference preference = findPreference(key);
preference.setSummary(sharedPreferences.getString(key, ""));
}
};
//获得Preference控件对应的SharePreferences对象,为其注册监听改变接口
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences.registerOnSharedPreferenceChangeListener(listener);
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章