- 浏览: 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>
相关推荐
android PreferenceActivity中的组件源码~
雨松MOMO带你做软件 Android软件开发之PreferenceActivity中组件的使用 ,欢迎大家下载阅读 哇咔咔~~
NULL 博文链接:https://topmanopensource.iteye.com/blog/1291071
PreferenceActivity用法简介 Android X
Android之PreferenceActivity简介,Android之PreferenceActivity简介
android中PreferenceActivity详解
该资源包含了一个android自定义的preferenceActivity简单易懂,喜欢的下载!
使用 PreferenceActivity设置个性信息, 参考:android 设置类PreferenceActivity http://blog.csdn.net/xiaobijia/article/details/41479235
这个示例 PreferenceActivity 类的用法,它可以保存设置
看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找。PerferenceActivity是什么,看下面的截图: Android系统截图(左) ...
android 开发者指南 ,我们看到Android系统本身就大量...看出来了吧,Preference,对就是使用SharedPreferneces以键值对的形式进行保存的,当然,我们也可以通过SharedPreferences来获取PreferenceActivity设置的值。
为了引入这个概率 首先从需求说起 即:现有某Activity专门用于手机属性设置 那么应该如何做呢
最近研究了Android Setting中源码部分,发现大多视图显示部分大多采用的是Preference,所以我修改了系统设置中的一个界面希望能帮助到大家
NULL 博文链接:https://zhanglimijavaeye.iteye.com/blog/965456
PreferenceFragment偏好设置的Demo,它会自动保存用户...Android3.0以前我们使用PreferenceActivity基类去显示给用户一个选项设置的界面。在Android3.0或更高的版本上,可以使用PreferenceFragment类去实现这个功能。
看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找
“ AndroidPreferenceActivity”是一个Android库,它提供了Android SDK内置的PreferenceActivity的替代实现。 这样的活动提供了对分类偏好的可视化。 活动的外观取决于设备显示屏的大小。 在具有小屏幕的设备上,...
NULL 博文链接:https://mypyg.iteye.com/blog/839501
“ AndroidPreferenceActivity”是一个Android库,它提供了Android SDK内置的PreferenceActivity的替代实现。 这样的活动提供了对分类偏好的可视化。 活动的外观取决于设备显示屏的大小。 在具有小屏幕的设备上,...