1.使用PerferenceActivity或者PerferenceFragment实现。
2.在创建布局时,选择PreferenceScreen;
PreferenceGroup:显示多个选项的容器,是PreferenceScreen和PreferenceCategory的父类;
PreferenceScreen:必须是一个PreferenceActivity/PreferenceFragment的根标签,也可用于其他Preference中。用于根标签时是不可见的,当用于其他偏好层级中时,是可见的,但是它所包含的子层级是不可见,点击它会跳转到
另一个Screen中,并显示它的子层级。
PreferenceCategory:用于给一组选项设置不可点击的标题;
ListPreference:以对话框的形式显示一系列词目的Preference;
CheckBoxPreference:提供了复选框功能的Preference;
DialogPreference:提供了对话框功能的Preference;
EditTextPreference:DialogPreference的子类,加入了EditText的功能;
3。xml主要属性:
android:orderingFromXml:是否按照xml文件中的顺序,若设置此属性,必须是false或者true。
android:key:存储设置选项的键;
android:summary:选项的主题;
android:summary:选项标题;
4.实例:
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
android:title="铃声设置">
<RingtonePreference
android:title="提示音"
android:summary="默认铃声"
android:key="key_ringtone_preference"
android:ringtoneType="ringtone"/>
</PreferenceCategory>
</PreferenceScreen>java代码:MainActivity.java中:
public class MainActivity extends Activity implements OnClickListener {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button_settings);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
getFragmentManager().beginTransaction().replace(R.id.containner, new SettingPreference())
.commit();
}
}
PreferenceFragment.java中:public class SettingPreference extends PreferenceFragment implements OnPreferenceChangeListener{
private static Activity activity;
private RingtonePreference mRingtone;
private PreferenceScreen mPreferenceScreen;
private static final String KEY_RINGTONE = "key_ringtone_preference";
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.generalpreference);
activity = getActivity();
mPreferenceScreen = getPreferenceScreen();
mRingtone = (RingtonePreference) mPreferenceScreen.findPreference(KEY_RINGTONE);
String ringtoneUri = getRingtonePreference();
String ringtone = getRingtoneTitleFromUri(ringtoneUri);
mRingtone.setSummary(ringtone == null? "":ringtone);
//设置监听事件
mRingtone.setOnPreferenceChangeListener(this);
}
/**
* 首选项值改变时回调
*/
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// TODO Auto-generated method stub
if(preference == mRingtone){
Toast.makeText(getActivity(), "newValue="+newValue, Toast.LENGTH_SHORT).show();
setRingtonePreference((String)newValue);
String ringtongTitle = getRingtoneTitleFromUri((String)newValue);
mRingtone.setSummary(ringtongTitle);
}
return true;
}
/**
* 得到铃声的Uri
* @return
*/
public static String getRingtonePreference(){
SharedPreferences prefs = activity.getSharedPreferences("SP", Context.MODE_PRIVATE);
String ringtone = prefs.getString(KEY_RINGTONE, null);
return ringtone;
}
/**
* 将铃声的Uri进行存储
* @param str
*/
public static void setRingtonePreference(String str){
SharedPreferences prefs = activity.getSharedPreferences("SP", Context.MODE_PRIVATE);
prefs.edit().putString(KEY_RINGTONE, str).commit();
}
/**
* 获取铃声名
* @param uri
* @return
*/
public static String getRingtoneTitleFromUri(String uri){
if(TextUtils.isEmpty(uri)){
return null;
}
Ringtone ringtone = RingtoneManager.getRingtone(activity, Uri.parse(uri));
String ringtoneTitle = ringtone.getTitle(activity);
return ringtoneTitle;
}
}
运行效果:
本文介绍了如何使用PerferenceActivity或PerferenceFragment实现Android应用中的偏好设置功能。通过具体示例展示了不同类型的偏好设置项,如RingtonePreference、CheckBoxPreference等的使用方法,并提供了完整的代码示例。
938

被折叠的 条评论
为什么被折叠?



