android 开发-系统设置界面的实现
具体与Preference的用法类似,这里就不做过多解释,直接贴示例代码,需要在res下新建xml文件夹,在xml文件夹下添加xml文件。
xml:(注意:root节点是:PreferenceScreen)
1 <?xml version="1.0" encoding="utf-8"?> 2 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 3 4 <!-- 类别 --> 5 <PreferenceCategory 6 android:key="mylocation" 7 android:summary="我的位置源" 8 android:title="我的位置" > 9 10 <!-- 可以加各种其他控件如 :CheckBoxPreference --> 11 <CheckBoxPreference 12 android:key="wireless_network" 13 android:summary="使用无线网络查看应用程序(例如Google地图中的位置)" 14 android:title="使用无线网络" /> 15 <CheckBoxPreference 16 android:key="gps_satellite_setting" 17 android:summary="定位时,精确到接到级别(取消选择可节约电量)" 18 android:title="启用GPS卫星导航" /> 19 </PreferenceCategory> 20 <PreferenceCategory 21 android:key="myMessage" 22 android:summary="个人信息设置" 23 android:title="个人信息设置" > 24 <CheckBoxPreference 25 android:key="yesno_save_individual_info" 26 android:title="是否保存个人信息" /> 27 28 <EditTextPreference 29 android:key="individual_name" 30 android:summary="请输入真实姓名" 31 android:title="姓名" /> 32 33 <ListPreference 34 android:entries="@array/citys" 35 android:entryValues="@array/citys" 36 android:key="mycity" 37 android:summary="所属城市" 38 android:title="城市列表" /> 39 </PreferenceCategory> 40 41 </PreferenceScreen>
activity
1 package com.example.android_data_storage_share2; 2 3 import android.os.Bundle; 4 import android.preference.CheckBoxPreference; 5 import android.preference.EditTextPreference; 6 import android.preference.ListPreference; 7 import android.preference.Preference; 8 import android.preference.Preference.OnPreferenceChangeListener; 9 import android.preference.PreferenceActivity; 10 import android.preference.PreferenceScreen; 11 import android.widget.Toast; 12 13 /** 14 * @author xiaowu 15 * @NOTE: 状态改变后的自动文件存储 需要继承PreferenceActivity的类和实现OnPreferenceChangeListener接口,重写onPreferenceTreeClick方法进行业务逻辑处理 16 */ 17 public class MainActivity extends PreferenceActivity implements 18 OnPreferenceChangeListener { 19 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 // setContentView(R.layout.activity_main); 24 // 加载设置的底层界面 API11之前可以使用下面的方式,而高版本使用perferenceFragment, 25 addPreferencesFromResource(R.xml.setting); 26 //得到屏幕管理器并设置它的名称 27 // getPreferenceManager().setSharedPreferencesName("mysetting2"); 28 // addPreferencesFromResource(R.xml.mysetting); 29 } 30 31 // 通过preference找到某个节点 32 @Override 33 public boolean onPreferenceChange(Preference preference, Object newValue) { 34 // TODO Auto-generated method stub 35 return false; 36 } 37 38 // 如果需要勾选一项后,其他项不可用,需要重写方法onPreferenceTreeClick(PreferenceScreen 39 // preferenceScreen,Preference preference),并在该方法中处理业务逻辑 40 @Override 41 @Deprecated 42 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 43 Preference preference) { 44 if ("yesno_save_individual_info".equals(preference.getKey())) { 45 CheckBoxPreference checkBoxPreference = (CheckBoxPreference) findPreference("yesno_save_individual_info"); 46 EditTextPreference editTextPreference = (EditTextPreference) findPreference("individual_name"); 47 editTextPreference.setEnabled(checkBoxPreference.isChecked()); 48 // ListPreference listPreference = (ListPreference) 49 // findPreference("mycity"); 50 // listPreference.setEnabled(false); 51 } 52 // TODO Auto-generated method stub 53 return super.onPreferenceTreeClick(preferenceScreen, preference); 54 } 55 56 }
效果展示: