当前位置:   article > 正文

Android APP:Preference使用详解和实例(附源码)_android preference

android preference

 

             Android APP:Preference使用详解和实例

 

一、Preference 是Android app中重要的控件之一,Settings 模块大部分都是通过Preference 实现的,这里将学习preference 使用方法。

二、Perference 使用方法
一般在XML文件夹中创建xml文件来对Settings进行布局,布局文件中通常使用PreferenceScreen容器,PreferenceScreen包含多个 Preference控件,PreferenceCategory可以设置分类标题。

三、常用Preference控件如下:

              Preference 控件家庭          View控件家庭       控件含义                   
               Preference                         TextView            文本框                      
              CheckPreference              CheckBox           单选框                  
              EditTextPreference           EditText               输入文本框            
              ListPreference                   ListView             列表框             
              RingtonePreference          ——                    铃声
              PreferenceCategory        类似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局更具备层次感 。
              PreferenceScreen            所有Preference元素的根节点

           上面控件等同Layout布局中的View,PreferenceScreen 等同Layout布局中的ViewGroup。在Android 3.0之前需要继承PreferenceActivity(此方法不是太推荐使用,已被启用),3.0之后更高版本,则需要继承Activity,使用Fragment控制布局,然后实现不同控件的处理事件。

三、Perference常用使用方法如下两种:

       1、使用XML定义Preference
       2、使用Fragment 定义Preference

四、使用XML定义Preference

        此方法有点过时,不太建议使用,但目前还可以用。让Activity继承PreferenceActivity,然后在重写onCreate方法,添加preferences.xml作为显示界面。

         其使用方法如下:

         1、在res/xml/目录中新建xml文件 例如:settingsfragment.xml


         2、继承PreferenceActivity在onCreate方法中直接调用addPreferencesFromResource(R.xml.settingsfragment);添加布局


         3、点击事件处理setOnPreferenceClickListener,内容发生改变事件处理 setOnPreferenceChangeListener

              4、执行效果图

五、使用Fragment 定义Preference

        1 、 新建一个资源文件,类型是Preference,为了方便管理我们在res资源文件夹里新建一个名为xml的文件夹,存放我们的资源文件.鼠标右键xml/new/xml resouce file,新建一个settingsfragment.xml文件  。

     2、自定义 SettingsFragment。

  1. public class SettingsFragment extends PreferenceFragment {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. // Load the preferences from an XML resource
  6. addPreferencesFromResource(R.xml.preference);
  7. }
  8. }

      3、preference 实现,settingsfragment.xml文件内容如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
  3. <PreferenceCategory
  4. android:key="categoryOne"
  5. android:title="General">
  6. <Preference
  7. android:key="prefAndroid"
  8. android:title="安卓"
  9. android:summary="点一下更新内容"/>
  10. <Preference
  11. android:key="prefIos"
  12. android:title="IOS"
  13. android:summary="可以作为一个设置项"/>
  14. <CheckBoxPreference
  15. android:key="prefCheckBoxOne"
  16. android:title="这相当于一个CheckBox"/>
  17. <CheckBoxPreference
  18. android:key="prefCheckBoxTwo"
  19. android:title="还可以设置summary"
  20. android:summaryOn="选中了"
  21. android:summaryOff="没选中"/>
  22. <CheckBoxPreference
  23. android:key="TestCheckBoxTwo"
  24. android:title="testsummary" />
  25. <EditTextPreference
  26. android:key="prefEditText"
  27. android:title="这相当于一个EditText"
  28. android:summary="我是EditText的一个summary"/>
  29. <ListPreference
  30. android:key="prefList"
  31. android:title="这相当于一个List表"/>
  32. <Preference android:key="up_time"
  33. android:enabled="false"
  34. android:shouldDisableView="false"
  35. android:title="Up time"
  36. android:summary="hh:min:sec"
  37. android:persistent="false" />
  38. </PreferenceCategory>
  39. <PreferenceCategory
  40. android:key="prefCategoryTwo"
  41. android:title="Inactive" >
  42. <MultiSelectListPreference
  43. android:key="prefMultiSelect"
  44. android:title="这相当于一个MultiSelect"/>
  45. <SwitchPreference
  46. android:key="prefSwitch"
  47. android:title="这相当于一个Switch"
  48. android:switchTextOn="switchTextOn选中了"
  49. android:switchTextOff="switchTextOff没选中"
  50. android:summaryOn="summaryOn选中了"
  51. android:summaryOff="summaryOff没选中"
  52. android:shadowColor="#0df10d"/>
  53. <RingtonePreference
  54. android:key="prefRingtone"
  55. android:title="这相当于一个"
  56. android:summary="请选择铃声"
  57. android:icon="@mipmap/ic_launcher_round"/>
  58. </PreferenceCategory>
  59. </PreferenceScreen>

    4、Activity 中调用Fragment

  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. // TODO Auto-generated method stub
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_preference);
  7. getFragmentManager().beginTransaction()
  8. .replace(R.id.settingsFragment, new SettingsFragment()).commit();
  9. }
  10. }

    5、MainActivity.java代码

  1. package com.example.preferencedemo;
  2. import android.net.wifi.WifiConfiguration;
  3. import android.os.Handler;
  4. import android.os.SystemClock;
  5. import android.preference.CheckBoxPreference;
  6. import android.preference.Preference;
  7. import android.preference.PreferenceActivity;
  8. import android.preference.PreferenceFragment;
  9. import android.support.v7.app.AppCompatActivity;
  10. import android.os.Bundle;
  11. import java.lang.ref.WeakReference;
  12. import android.os.Message;
  13. import android.net.wifi.WifiManager;
  14. import android.widget.Toast;
  15. //public class MainActivity extends PreferenceActivity {
  16. public class MainActivity extends AppCompatActivity {
  17. public static Preference mUptime;
  18. private Handler mHandler;
  19. private static final int EVENT_UPDATE_STATS = 500;
  20. public static class SettingsFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener {
  21. private CheckBoxPreference m_prefCheckBoxTwo;
  22. @Override
  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. // Load the preferences from an XML resource
  26. addPreferencesFromResource(R.xml.settingsfragment);
  27. mUptime = findPreference("up_time");
  28. m_prefCheckBoxTwo=(CheckBoxPreference) findPreference("TestCheckBoxTwo");
  29. m_prefCheckBoxTwo.setOnPreferenceChangeListener(this);
  30. }
  31. @Override
  32. public boolean onPreferenceClick(Preference preference) {
  33. // TODO Auto-generated method stub
  34. return false;
  35. }
  36. @Override
  37. public boolean onPreferenceChange(Preference preference, Object o) {
  38. if (preference == m_prefCheckBoxTwo){
  39. m_prefCheckBoxTwo.setSummary("checked or no:"+m_prefCheckBoxTwo.isChecked());
  40. }
  41. return true; //保存更新后的值
  42. }
  43. }
  44. private class MyHandler extends Handler {
  45. @Override
  46. public void handleMessage(Message msg) {
  47. switch (msg.what) {
  48. case EVENT_UPDATE_STATS:
  49. updateTimes();
  50. sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);
  51. break;
  52. }
  53. }
  54. } @Override
  55. protected void onCreate(Bundle savedInstanceState) {
  56. super.onCreate(savedInstanceState);
  57. mHandler = new MyHandler();
  58. setContentView(R.layout.activity_main);
  59. getFragmentManager().beginTransaction()
  60. .replace(R.id.settingsFragment, new SettingsFragment()).commit();
  61. // addPreferencesFromResource(R.xml.settingsfragment);
  62. // mUptime = findPreference("up_time");
  63. mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
  64. }
  65. private void updateTimes() {
  66. long at = SystemClock.uptimeMillis() / 1000;
  67. long ut = SystemClock.elapsedRealtime() / 1000;
  68. if (ut == 0) {
  69. ut = 1;
  70. }
  71. mUptime.setSummary(convert(ut));
  72. }
  73. private String pad(int n) {
  74. if (n >= 10) {
  75. return String.valueOf(n);
  76. } else {
  77. return "0" + String.valueOf(n);
  78. }
  79. }
  80. private String convert(long t) {
  81. int s = (int)(t % 60);
  82. int m = (int)((t / 60) % 60);
  83. int h = (int)((t / 3600));
  84. return h + ":" + pad(m) + ":" + pad(s);
  85. }
  86. }

 

       6、执行效果图。

六、源码路径

      1使用XML定义Preference源码路径。https://download.csdn.net/download/qq_37858386/12074718

      2、使用Fragment 定义Preference源码路径:https://download.csdn.net/download/qq_37858386/12074681

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/152956
推荐阅读
相关标签
  

闽ICP备14008679号