首页 > 其他分享 >Android开发之PreferenceActivity .

Android开发之PreferenceActivity .

时间:2022-10-06 12:09:49浏览次数:54  
标签:xml PreferenceActivity 开发 preference key ListPreference Android android


今天我们来讲PreferenceActivity的使用。我们先来认识一下它,看看它长什么样?呵呵,截图如下:

看到没?这就是PreferenceActivity.看起来蛮眼熟的,在哪见过。呵呵,对,在我们得模拟器“设置”—>“无线和网络”中,就使用了这个。呵呵,下面来跟据一个项目实例,来讲述它的具体应用。

1、  创建Android项目,命名为PreferenceActivity。

2、  在values目录下新建一个array.xml文件,以备下面程序使用,该文件代码如下:


​view plain​​​ ​​​copy to clipboard​​​ ​​​print​​​ ​​​?​



  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string-array name="entries">
  4. <item>test1</item>
  5. <item>test2</item>
  6. <item>test3</item>
  7. </string-array>
  8. <string-array name="entriesvalue">
  9. <item>1</item>
  10. <item>2</item>
  11. <item>3</item>
  12. </string-array>
  13. </resources>


<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="entries"> <item>test1</item> <item>test2</item> <item>test3</item> </string-array> <string-array name="entriesvalue"> <item>1</item> <item>2</item> <item>3</item> </string-array> </resources>

3、  在res目录下新建一个xml目录,在里面新建一个preference.xml文件,该文件的具体内容如下:


​view plain​​​ ​​​copy to clipboard​​​ ​​​print​​​ ​​​?​



  1. <?xml version="1.0" encoding="utf-8"?>
  2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <PreferenceCategory android:title="我的位置">
  8. <CheckBoxPreference
  9. android:key="first"
  10. android:title="飞行模式"
  11. android:defaultValue="true"
  12. />
  13. <CheckBoxPreference
  14. android:key="second"
  15. android:title="Wi-Fi"
  16. android:summaryOn="开启"
  17. android:summaryOff="关闭"
  18. android:defaultValue="true"
  19. />
  20. <Preference
  21. android:key="third"
  22. android:title="Wi-Fi设置"
  23. android:summary="设置和管理无线接入点"
  24. />
  25. <ListPreference
  26. android:key="ListPreference"
  27. android:title="ListPreference"
  28. android:summary="ListPreference测试"
  29. android:dialogTitle="ListPreference"
  30. android:entries="@array/entries"
  31. android:entryValues="@array/entriesvalue"
  32. />
  33. <EditTextPreference
  34. android:key="EditTextPreference"
  35. android:title="EditTextPreference"
  36. android:summary="点击输入"
  37. android:dialogTitle="输入设置"
  38. />
  39. <RingtonePreference
  40. android:key="RingtonePreference"
  41. android:title="RingtonePreference"
  42. android:summary="选择铃声"
  43. />
  44. </PreferenceCategory>
  45. </PreferenceScreen>


<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <PreferenceCategory android:title="我的位置"> <CheckBoxPreference android:key="first" android:title="飞行模式" android:defaultValue="true" /> <CheckBoxPreference android:key="second" android:title="Wi-Fi" android:summaryOn="开启" android:summaryOff="关闭" android:defaultValue="true" /> <Preference android:key="third" android:title="Wi-Fi设置" android:summary="设置和管理无线接入点" /> <ListPreference android:key="ListPreference" android:title="ListPreference" android:summary="ListPreference测试" android:dialogTitle="ListPreference" android:entries="@array/entries" android:entryValues="@array/entriesvalue" /> <EditTextPreference android:key="EditTextPreference" android:title="EditTextPreference" android:summary="点击输入" android:dialogTitle="输入设置" /> <RingtonePreference android:key="RingtonePreference" android:title="RingtonePreference" android:summary="选择铃声" /> </PreferenceCategory> </PreferenceScreen>

4、  以上做好后,我们就只要修改程序中的部分代码了。首先,我们得让它继承自PreferenceActivity的Activity,然后在主程序中调用addPreferencesFromResource(R.xml.preference);就可以了。具体代码如下:


​view plain​​​ ​​​copy to clipboard​​​ ​​​print​​​ ​​​?​



  1. public class PreferenceActivityTest extends PreferenceActivity implements OnSharedPreferenceChangeListener{
  2. SharedPreferences prefs;
  3. ListPreference listPreference;//声明ListPreference
  4. /** Called when the activity is first created. */
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. addPreferencesFromResource(R.xml.preference);
  9. //我们可以通过各个preference的key来得到Preference的view,从而可以用它进行相关操作
  10. listPreference=(ListPreference)findPreference("ListPreference");
  11. str=listPreference.getKey();
  12. System.out.println(str);
  13. /*PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现
  14. * 设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/
  15. * data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。
  16. * 如果要获取该文件中的值,我们可以通过以下方式取得*/
  17. prefs=PreferenceManager.getDefaultSharedPreferences(this);
  18. value=prefs.getString("ListPreference", "xyz");
  19. Toast.makeText(this, value, Toast.LENGTH_LONG).show();
  20. }
  21. @Override
  22. public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
  23. Preference preference) {
  24. // TODO Auto-generated method stub
  25. if(preference.getKey().equals("third")){
  26. //这里可以操作,实现界面的跳转
  27. intent=new
  28. intent.setClass(this, RunActivity.class);
  29. startActivity(intent);
  30. }
  31. return super.onPreferenceTreeClick(preferenceScreen, preference);
  32. }
  33. //当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发
  34. public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
  35. String key) {
  36. // TODO Auto-generated method stub

  37. }
  38. }


public class PreferenceActivityTest extends PreferenceActivity implements OnSharedPreferenceChangeListener{ SharedPreferences prefs; ListPreference listPreference;//声明ListPreference /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); //我们可以通过各个preference的key来得到Preference的view,从而可以用它进行相关操作 listPreference=(ListPreference)findPreference("ListPreference"); String str=listPreference.getKey(); System.out.println(str); /*PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现 * 设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/ * data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。 * 如果要获取该文件中的值,我们可以通过以下方式取得*/ prefs=PreferenceManager.getDefaultSharedPreferences(this); String value=prefs.getString("ListPreference", "xyz"); Toast.makeText(this, value, Toast.LENGTH_LONG).show(); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { // TODO Auto-generated method stub if(preference.getKey().equals("third")){ //这里可以操作,实现界面的跳转 Intent intent=new Intent(); intent.setClass(this, RunActivity.class); startActivity(intent); } return super.onPreferenceTreeClick(preferenceScreen, preference); } //当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // TODO Auto-generated method stub } }

5、  到此我们得项目框架就已经搭建好了,单击执行便会得到我们以上的效果。

但是我们得任务还没完,下面的讲解才是本节的重点。学习PreferenceActivity我们需要注意一下几点:

第一, preference下的View是有限的,只有下面几个:

  • CheckBoxPreference:CheckBox选择项,对应的值的ture或flase
  • EditTextPreference:输入编辑框,值为String类型,会弹出对话框供输入。
  • ListPreference: 列表选择,弹出对话框供选择。
  • Preference:只进行文本显示,需要与其他进行组合使用。
  • PreferenceCategory:用于分组。
  • RingtonePreference:系统玲声选择

第二,PreferenceActivity布局中的一些属性。

android:key 唯一标识符。它对应保存的XML保存的配置文件中的节点的 name属性。android:defaultValue 默认值,对应XML中的Value属性的值。

android:title:显示标题(大字体显示)。

 android:summary:副标题(小字体显示)。

android:dialogTitle:弹出对话框的标题

android:entries:列表中显示的值。为一个数组,通读通过资源文件进行设置。

android:entryValues:列表中实际保存的值,与entries对应。

第三,当PreferenceActivity上的View有所更改时,系统会自动将对应的值更新到XML配置文件中,该文件可以在android 的 file explorer 中的 data/data/"yourPageName"/shared_prefs/"yourpageName"_prefenrences.xml中找到。“yourpageName”表示你项目所在的包。

第四,如何响应PreferenceActivity操作。

其实,我们只要重写PreferenceActivity的onPreferenceTreeClick的方法就可以了,通过参数preference来判断是对那一个元素进行的,并根据需要进行操作。

到此,内容已经基本上剖析完全了。呵呵!

标签:xml,PreferenceActivity,开发,preference,key,ListPreference,Android,android
From: https://blog.51cto.com/jdsjlzx/5733469

相关文章