preference 用法之Settings
我们的app有时常需要包含Settings,那我们该怎样允许app使用Settings呢?这里我们就需要用到Preference类。
下面我就举一个例子来让我们更好的理解。
1.创建xml文件夹
使用Setting我们首先需要创建一个res/xml文件夹,并且在里面创建一个文件类型为Preference的xml文件。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- opens a subscreen of settings -->
<!-- 创建一个子目录 -->
<PreferenceScreen
android:key="button_voicemail_category_key"
android:persistent="false"
android:title="@string/voicemail" >
<ListPreference
android:defaultValue="上海"
android:entries="@array/citys"
android:entryValues="@array/citys"
android:key="button_voicemail_provider_key"
android:title="@string/voicemail_provider" />
<!-- opens another nested subscreen -->
<PreferenceScreen
android:key="button_voicemail_setting_key"
android:persistent="false"
android:title="@string/voicemail_settings" >
</PreferenceScreen>
<RingtonePreference
android:key="button_voicemail_ringtone_key"
android:ringtoneType="notification"
android:title="@string/voicemail_ringtone_title" />
</PreferenceScreen>
<!-- 创建一个目录分组 -->
<PreferenceCategory
android:key="pref_key_storage_settings"
android:title="@string/pref_sms_storage_title" >
<CheckBoxPreference
android:defaultValue="false"
android:key="pref_key_auto_delete"
android:summary="@string/pref_summary_auto_delete"
android:title="@string/pref_title_auto_delete" />
<ListPreference
android:defaultValue="上海"
android:dependency="pref_key_auto_delete"
android:dialogTitle="citys"
android:entries="@array/citys"
android:entryValues="@array/citys"
android:key="pref_syncConnectionType"
android:summary="choice the city which you live"
android:title="choice city" />
<!-- 创建一编辑框输入内容 -->
<EditTextPreference
android:dependency="pref_key_auto_delete"
android:key="pref_key_sms_delete_limit"
android:summary="@string/pref_summary_delete_limit"
android:title="@string/pref_title_sms_delete" />
<Preference
android:dependency="pref_key_auto_delete"
android:key="pref_key_mms_delete_limit"
android:summary="@string/pref_summary_delete_limit"
android:title="@string/pref_title_mms_delete" />
</PreferenceCategory>
</PreferenceScreen>
2. 创建我们的Activity继承PreferenceActivity
这里是不需要布局的
<pre name="code" class="java">package com.example.preferencetest;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends PreferenceActivity implements
OnPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//修改保存的文件名称
getPreferenceManager().setSharedPreferencesName("Test");
// 3.0版本以后就需要使用PreferenceFragment,这里用过时的也没关系
addPreferencesFromResource(R.xml.mysetting);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// TODO Auto-generated method stub
return false;
}
//重写这个方法,对其xml的属性进行操作
@Override
@Deprecated
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
// TODO Auto-generated method stub
//当checkbox被点击了才可以对以下属性进行修改
if("pref_key_auto_delete".equals(preference.getKey())){
Toast.makeText(getApplicationContext(), "被点击了", 1).show();
//这里需要匹配xml的key
CheckBoxPreference box=(CheckBoxPreference) findPreference("pref_key_auto_delete");
EditTextPreference edit=(EditTextPreference) findPreference("pref_key_sms_delete_limit");
//当box被点击的时候edit才可以被编辑
edit.setEnabled(box.isChecked());
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}
最后将Strings.xml发一下
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">PreferenceTest</string>
<string name="action_settings">Settings</string>
<string name="voicemail">voicemail</string>
<string name="voicemail_provider">voicemail_provider</string>
<string name="voicemail_settings">voicemail_settings</string>
<string name="voicemail_ringtone_title">voicemail_ringtone_title</string>
<string name="pref_sms_storage_title">pref_sms_storage_title</string>
<string name="pref_summary_auto_delete">pref_summary_auto_delete</string>
<string name="pref_title_auto_delete">pref_title_auto_delete</string>
<string name="pref_summary_delete_limit">pref_summary_delete_limit</string>
<string name="pref_title_sms_delete">pref_title_sms_delete</string>
<string name="pref_title_mms_delete">pref_title_mms_delete</string>
<string-array name="citys">
<item >北京</item>
<item >上海</item>
<item >天津</item>
<item >延安</item>
</string-array>
</resources>
这里我说一下,具体的settings的其他功能在android的Settings文档里都有,如果看不懂的可以直接查api。
效果图:
首先看下主界面
点击listpreference的效果图
子目录效果图这里我就不上传了。
文件下载路径:http://download.csdn.net/detail/kluing/7881731
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)