PreferenceGroup中RingtonePreference的用法

本文介绍了如何使用PerferenceActivity或PerferenceFragment实现Android应用中的偏好设置功能。通过具体示例展示了不同类型的偏好设置项,如RingtonePreference、CheckBoxPreference等的使用方法,并提供了完整的代码示例。
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;
		
	}
}
运行效果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值