转载请标明出处:
http://blog.csdn.net/zq2114522/article/details/50557811;
本文出自:【梁大盛的博客】
Android之设置页面(PreferenceActivity使用)
引:没仔细看Setting之前也接触过PreferenceActivity.之前还是停留在PreferenceActivity仅仅封装了SharedPreferences的层面上.事实上PreferenceActivity早在API 1就引入并且很多时候用来设计设置页面.原生Android Setting程序就是这样干的.使用PreferenceActivity作为设置页面可以省略界面的设计,用各种Preference的子类实现界面,如CheckBoxPreference, EditTextPreference, ListPreference, MultiSelectListPreference, PreferenceCategory, PreferenceScreen, SwitchPreference等.编辑一个xml文件即可以完成界面的设计.然后提供形形色色的回调接口.当设置给修改以后会自动保存相应的SharedPreferences并且回调已经设置的回调函数.
首先贴出Demo效果图和代码.
MainActivity.java
package com.example.dsliang.preferenceactivitydemo;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(android.R.id.content, new PreferenceFagment());
fragmentTransaction.commit();
}
}
package com.example.dsliang.preferenceactivitydemo;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.widget.Toast;
/**
* Created by dsliang on 2016/1/21.
*/
public class PreferenceFagment extends PreferenceFragment {
SharedPreferences.OnSharedPreferenceChangeListener mChangeListener;
Activity mActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = getActivity();
mChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if ("setting_wifi".equals(key) || "setting_bluetouh".equals(key) || "charge_lock_screen".equals(key) || "never_sleep".equals(key)) {
Toast.makeText(mActivity, key + " : change to " + sharedPreferences.getBoolean(key, true), Toast.LENGTH_SHORT).show();
}else if("setting_timezone".equals(key))
{
findPreference("setting_timezone").setSummary(sharedPreferences.getString(key,"GMY - 02:00"));
}
}
};
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(mChangeListener);
}
@Override