`
阿尔萨斯
  • 浏览: 4173152 次
社区版块
存档分类
最新评论

Android 偏好设置 PreferenceActivity 小于3.0使用

 
阅读更多
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.preference.RingtonePreference;

import com.stone.R;
import com.stone.util.LogUtils;

/**
 * 3.0以下使用的偏好设置
 * 使用xml中定义的相关key 自动存储在/data/data/com.stone/shared_prefs/com.stone_preferences.xml
 * @author stone
 *
 */
public class TestPreferenceActivity extends PreferenceActivity implements
		Preference.OnPreferenceClickListener,
		Preference.OnPreferenceChangeListener, SharedPreferences.OnSharedPreferenceChangeListener {
	private static String TAG = "TestPreferenceActi";
	
	private CheckBoxPreference mapply_wifiPreference;       //打开wifi
	private CheckBoxPreference mapply_internetPreference;   //Internet共享
	private ListPreference depart_valuePreference;          //部门设置
	private EditTextPreference number_editPreference;       //输入电话号码
	private Preference mwifi_settingPreference;             //wifi设置
	private RingtonePreference alarmRingtonePreference, notificationRingtonePreference, ringtoneRingtonePreference;	//铃声

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.preference);
		
		//根据key值找到控件
		mapply_wifiPreference = (CheckBoxPreference) findPreference("apply_wifi");
		mapply_internetPreference = (CheckBoxPreference) findPreference("apply_internet");
		depart_valuePreference = (ListPreference) findPreference("depart_value");
		number_editPreference = (EditTextPreference) findPreference("number_edit");
		mwifi_settingPreference = (Preference) findPreference("wifi_setting");
		alarmRingtonePreference = (RingtonePreference) findPreference("ring_alarm");
		notificationRingtonePreference = (RingtonePreference) findPreference("ring_notification");
		ringtoneRingtonePreference = (RingtonePreference) findPreference("ring_ringtone");

		// 设置监听器
		mapply_internetPreference.setOnPreferenceClickListener(this); //点击
		mapply_internetPreference.setOnPreferenceChangeListener(this);//值改变 
		
		depart_valuePreference.setOnPreferenceClickListener(this);
		depart_valuePreference.setOnPreferenceChangeListener(this);
		
		number_editPreference.setOnPreferenceClickListener(this);
		number_editPreference.setOnPreferenceChangeListener(this);
		
		mwifi_settingPreference.setOnPreferenceClickListener(this);
		
		alarmRingtonePreference.setOnPreferenceChangeListener(this);
		notificationRingtonePreference.setOnPreferenceChangeListener(this);
		ringtoneRingtonePreference.setOnPreferenceChangeListener(this);
		

		// 得到我们的存储Preferences值的对象,然后对其进行相应操作
		SharedPreferences shp = PreferenceManager.getDefaultSharedPreferences(this);
		boolean apply_wifiChecked = shp.getBoolean("apply_wifi", false);
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		//注册sp 改变监听事件
		mapply_internetPreference.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		mapply_internetPreference.getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
	}
	// 对控件进行的一些操作
	private void operatePreference(Preference preference) {
		if (preference == mapply_wifiPreference){                  //点击了    "打开wifi"
			LogUtils.printInfo(TAG, " Wifi CB, and isCheckd ="+ mapply_wifiPreference.isChecked());
		}else if (preference.getKey().equals("apply_internet")){   //点击了"Internet共享"
			LogUtils.printInfo(TAG, " internet CB, and isCheckd = "+ mapply_internetPreference.isChecked());
		}else if (preference == depart_valuePreference){           //点击了 "部门设置"
			LogUtils.printInfo(TAG, " department CB,and selectValue = " +//
					 depart_valuePreference.getValue() + ", Text="+ depart_valuePreference.getEntry());
		}else if (preference.getKey().equals("wifi_setting")) {    //点击了"wifi设置"
			mwifi_settingPreference.setTitle("its turn me.");
		}else if (preference == number_editPreference)             //点击了"输入电话号码"
			LogUtils.printInfo(TAG, "number:Old Value="+ number_editPreference.getText() + //
					", New Value="+ number_editPreference.getEditText().toString());
	}
	
	@Override // 点击事件触发
	public boolean onPreferenceClick(Preference preference) {
		LogUtils.printInfo(TAG, "onPreferenceClick----->"+String.valueOf(preference.getKey()));
		// 对控件进行操作
		operatePreference(preference);
		return false;
	}
   
	@Override  //点击事件触发 ,这个属于 PreferenceActivity
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {
		LogUtils.printInfo(TAG, "onPreferenceTreeClick----->"+preference.getKey());
		// 对控件进行操作
		operatePreference(preference);
		if (preference.getKey().equals("bluetooth_setting")) {
			/*
			 *  创建一个新的Intent,
			 *  函数如果返回true, 则跳转至该自定义的新的Intent;
			 *  函数如果返回false,则跳转至xml文件中配置的Intent;
			 */
			Intent i = new Intent(TestPreferenceActivity.this, TestWebView.class); 
			i.putExtra("type", "wifi");
			startActivity(i);
			return false;
		}
		if (preference.getKey().equals("wifi_setting")) {
			LogUtils.printInfo(TAG, "......wifi_setting....");
			return false;
		}
		return false;
	}

	// 当Preference的值发生改变时触发该事件,true则以新值更新控件的状态,false则do noting
	@Override
	public boolean onPreferenceChange(Preference preference, Object objValue) {
		LogUtils.printInfo(TAG, "onPreferenceChange----->"+String.valueOf(preference.getKey()));
		if (preference == mapply_wifiPreference){
			LogUtils.printInfo(TAG, "onPreferenceChange----->Wifi CB, and isCheckd = " + String.valueOf(objValue));
		}else if (preference.getKey().equals("apply_internet")) {
			LogUtils.printInfo(TAG, "onPreferenceChange----->internet CB, and isCheckd = "+ String.valueOf(objValue));
			return false;  //不保存新值
		}else if (preference == depart_valuePreference){
			LogUtils.printInfo(TAG, "onPreferenceChange----->Old Value"+ 
								depart_valuePreference.getValue()+" NewDeptName"+objValue);
		}else if (preference.getKey().equals("wifi_setting")) {
			LogUtils.printInfo(TAG, "onPreferenceChange----->change" + String.valueOf(objValue));
			mwifi_settingPreference.setTitle("its turn me.");  //重新设置title
		} else if (preference == number_editPreference) {
			LogUtils.printInfo(TAG, "onPreferenceChange----->Old Value = " + String.valueOf(objValue));
			return true; // 保存新值
		}
		return true;  //保存更新后的值, 如果preference的android:persistent=false, 那么系统不会保存它的值, 该属性默认为true
	}

	@Override
	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
			String key) {
		Preference preference = findPreference(key);
		if (preference == number_editPreference) {
			LogUtils.printInfo(TAG, "-----"+sharedPreferences.getString(key, ""));
		}
		LogUtils.printInfo(TAG, "key="+key);
	}
}

preference.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- PreferenceCategory: 偏好分类 -->
    <PreferenceCategory
        android:key="set_local"
        android:title="我的位置" />

    <CheckBoxPreference
        android:defaultValue="true"
        android:key="apply_wireless"
        android:summary="使用无线网络在应用程序(例如Google地图)中查看位置"
        android:title="使用无线网络" >
    </CheckBoxPreference>
    <CheckBoxPreference
        android:key="apply_gps"
        android:summary="定位到街道级别(需要消耗更多的电量以及天气允许)"
        android:title="使用GPS" >
    </CheckBoxPreference>

    <PreferenceCategory android:title="无线和网络设置" />

    <CheckBoxPreference
        android:key="apply_fly"
        android:summary="禁用所有无线连接"
        android:title="飞行模式" >
    </CheckBoxPreference>
    <CheckBoxPreference
        android:key="apply_internet"
        android:summary="禁用通过USB共享Internet连接"
        android:title="Internet共享" >
    </CheckBoxPreference>
    
    <CheckBoxPreference
        android:key="apply_wifi"
        android:summary="打开Wi-Fi"
        android:title="Wi-Fi" >
    </CheckBoxPreference>

    <Preference	
        android:dependency="apply_wifi"
        android:key="wifi_setting"
        android:summary="设置和管理无线接入点(打开一个Intent)"
        android:title="Wi-Fi设置" >

        <!-- android:dependency 相关的key 偏好被被选中后才可使用 -->
        <!-- 点击时 自定义一个默认跳转Intent  action指定隐式Intent -->
        <!-- action指定隐式Intent ; targetPackage和targetClass指定显示Intent -->
        <intent
            android:action="com.stone.action.TestPreferenceActivity"
            android:targetClass="com.stone.ui.TestPreferenceActivity"
            android:targetPackage="com.stone" />
    </Preference>

    <CheckBoxPreference
        android:key="apply_bluetooth"
        android:summary="启用蓝牙"
        android:title="蓝牙" >
    </CheckBoxPreference>
	<!-- Preference 这个在sharedpreference中不会保存值的 -->
    <Preference
        android:dependency="apply_bluetooth"
        android:key="bluetooth_setting"
        android:summary="管理连接、设备设备名称和可检测性"
        android:title="蓝牙设置" >
    </Preference>

    <EditTextPreference
        android:key="number_edit"
        android:title="输入电话号码" >
    </EditTextPreference>
	
    <!--  -->
    <ListPreference
        android:dialogTitle="选择部门"
        android:entries="@array/department"
        android:entryValues="@array/department_value"
        android:key="depart_value"
        android:title="部门设置" >
    </ListPreference>
	<!-- PreferenceScreen 会显示一个新界面来装载  -->
    <PreferenceScreen	
        android:key="ps_ring"
        android:summary="@string/_preferencescreen_screen_"
        android:title="铃声设置" >
        <PreferenceCategory
            android:key="ring_key"
            android:title="铃声" >
            <RingtonePreference
                android:key="ring_ringtone"
                android:persistent="false"
                android:ringtoneType="ringtone"
                android:showDefault="true"
                android:showSilent="true"
                android:summary="音乐铃声"
                android:title="ringtone" />
            <RingtonePreference
                android:key="ring_notification"
                android:ringtoneType="notification"
                android:showDefault="true"
                android:showSilent="true"
                android:summary="通知的铃声"
                android:title="notification" />
            <RingtonePreference
                android:key="ring_alarm"
                android:ringtoneType="alarm"
                android:showDefault="true"
                android:showSilent="true"
                android:summary="闹钟的铃声"
                android:title="alarm" />
        </PreferenceCategory>
    </PreferenceScreen>

</PreferenceScreen>
string.xml

<string name="_preferencescreen_screen_"><PreferenceScreen> 嵌套后,显示子节点的标题,点击后新启动一个screen显示子元素</string>

arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="department">
        <item>IT</item>
        <item>Commerce</item>
        <item>HR</item>
    </string-array>
    <string-array name="department_value">
        <item>001</item>
        <item>002</item>
        <item>003</item>
    </string-array>

</resources>




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics