<span style="font-family: Arial; background-color: rgb(255, 255, 255);">Android设置Settings实现:PreferenceActivity</span>
Android的设置Settings功能比较常见,通常可以考虑使用PreferenceActivity实现。
PreferenceActivity需要从res/xml加载(addPreferencesFromResource)一个定义好的Preference的xml文件。比如preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="第一组" >
<ListPreference
android:icon="@drawable/ic_launcher"
android:dialogTitle="显示的信息"
android:entries="@array/citys"
android:entryValues="@array/citys_quhao"
android:key="list_f"
android:summary="城市区号"
android:title="城市名称"/>
<EditTextPreference
android:defaultValue="缺省值"
android:key="edit_text"
android:summary="显示设置"
android:title="显示" />
<CheckBoxPreference
android:defaultValue="true"
android:key="checkbox"
android:summary="显示密码"
android:title="安全" />
<Preference
android:key="wangye"
android:summary="主页"
android:title="浏览网页" >
<intent
android:action="android.intent.action.VIEW"
android:data="http://www.baidu.com"
>
</intent>
</Preference>
<PreferenceScreen
android:key="prs_key"
android:title="跳转到下一页"
android:summary="声音"
android:persistent="false">
<EditTextPreference
android:key="edit_qiantao"
android:title="声音大小设置"
android:summary="声音的设置强弱"
/>
</PreferenceScreen>
<SwitchPreference
android:key="wifi"
android:title="Wifi_NO_OFF"
android:summary="开启或关闭"
/>
</PreferenceCategory>
</PreferenceScreen>
其中需要的数组资源citys在res/values中的arrays.xml中定义好:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="citys"
>
<item >成都</item>
<item >北京</item>
<item >上海</item>
<item >南充</item>
</string-array>
<string-array name="citys_quhao">
<item >028</item>
<item >010</item>
<item >021</item>
<item >0817</item>
</string-array>
</resources>
上层Java代码:
先写一个PrefacFagment类
package com.example.preferenceactivity11;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
public class PrefacFagment extends PreferenceFragment {
EditTextPreference mEditTextPreference;
String E_key = "edit_text";
ListPreference mListPreference;
private OnSharedPreferenceChangeListener opcl = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(E_key)) {
String s = sharedPreferences.getString(E_key, "null");
mEditTextPreference.setSummary(s);
}
if (key.equals("list_f")) {
String s = mListPreference.getEntry() + "";
String p = mListPreference.getValue();
mListPreference.setSummary(s + "---" + p);
}
Toast.makeText(getActivity(), key, Toast.LENGTH_SHORT).show();
;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 添加设置的选项
addPreferencesFromResource(R.xml.preferences);
// 预读取。为PreferenceActivity中的某个设置选项初始化值
mEditTextPreference = (EditTextPreference) findPreference(E_key);
mListPreference = (ListPreference) findPreference("list_f");
// 通用的读取设置的某个值的方法
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
String s = sharedpreferences.getString("edit_text", "暂时为空");
Log.d("edit_text是", s);
sharedpreferences.registerOnSharedPreferenceChangeListener(opcl);
}
@Override
public void onResume() {
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(opcl);
super.onResume();
}
@Override
public void onPause() {
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(opcl);
super.onPause();
}
}
然后在MainActivity里面写
package com.example.preferenceactivity11;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class MainActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace
(android.R.id.content, new PrefacFagment()).commit();
}
}