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。

public class SettingsFragment extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// Load the preferences from an XML resourceaddPreferencesFromResource(R.xml.preference);}
}

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

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategoryandroid:key="categoryOne"android:title="General"><Preferenceandroid:key="prefAndroid"android:title="安卓"android:summary="点一下更新内容"/><Preferenceandroid:key="prefIos"android:title="IOS"android:summary="可以作为一个设置项"/><CheckBoxPreferenceandroid:key="prefCheckBoxOne"android:title="这相当于一个CheckBox"/><CheckBoxPreferenceandroid:key="prefCheckBoxTwo"android:title="还可以设置summary"android:summaryOn="选中了"android:summaryOff="没选中"/><CheckBoxPreferenceandroid:key="TestCheckBoxTwo"android:title="testsummary" /><EditTextPreferenceandroid:key="prefEditText"android:title="这相当于一个EditText"android:summary="我是EditText的一个summary"/><ListPreferenceandroid:key="prefList"android:title="这相当于一个List表"/><Preference android:key="up_time"android:enabled="false"android:shouldDisableView="false"android:title="Up time"android:summary="hh:min:sec"android:persistent="false" /></PreferenceCategory><PreferenceCategoryandroid:key="prefCategoryTwo"android:title="Inactive" ><MultiSelectListPreferenceandroid:key="prefMultiSelect"android:title="这相当于一个MultiSelect"/><SwitchPreferenceandroid:key="prefSwitch"android:title="这相当于一个Switch"android:switchTextOn="switchTextOn选中了"android:switchTextOff="switchTextOff没选中"android:summaryOn="summaryOn选中了"android:summaryOff="summaryOff没选中"android:shadowColor="#0df10d"/><RingtonePreferenceandroid:key="prefRingtone"android:title="这相当于一个"android:summary="请选择铃声"android:icon="@mipmap/ic_launcher_round"/></PreferenceCategory>
</PreferenceScreen>

4、Activity 中调用Fragment

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_preference);getFragmentManager().beginTransaction().replace(R.id.settingsFragment, new SettingsFragment()).commit();}}

5、MainActivity.java代码

package com.example.preferencedemo;import android.net.wifi.WifiConfiguration;
import android.os.Handler;
import android.os.SystemClock;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.lang.ref.WeakReference;
import android.os.Message;
import android.net.wifi.WifiManager;
import android.widget.Toast;
//public class MainActivity extends PreferenceActivity {
public class MainActivity extends AppCompatActivity {public static Preference mUptime;private Handler mHandler;private static final int EVENT_UPDATE_STATS = 500;public static  class SettingsFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener {private CheckBoxPreference m_prefCheckBoxTwo;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// Load the preferences from an XML resourceaddPreferencesFromResource(R.xml.settingsfragment);mUptime = findPreference("up_time");m_prefCheckBoxTwo=(CheckBoxPreference) findPreference("TestCheckBoxTwo");m_prefCheckBoxTwo.setOnPreferenceChangeListener(this);}@Overridepublic boolean onPreferenceClick(Preference preference) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onPreferenceChange(Preference preference, Object o) {if (preference == m_prefCheckBoxTwo){m_prefCheckBoxTwo.setSummary("checked or no:"+m_prefCheckBoxTwo.isChecked());}return true;  //保存更新后的值}}private  class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case EVENT_UPDATE_STATS:updateTimes();sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);break;}}}   @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mHandler = new MyHandler();setContentView(R.layout.activity_main);getFragmentManager().beginTransaction().replace(R.id.settingsFragment, new SettingsFragment()).commit();// addPreferencesFromResource(R.xml.settingsfragment);// mUptime = findPreference("up_time");mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);}private  void updateTimes() {long at = SystemClock.uptimeMillis() / 1000;long ut = SystemClock.elapsedRealtime() / 1000;if (ut == 0) {ut = 1;}mUptime.setSummary(convert(ut));}private String pad(int n) {if (n >= 10) {return String.valueOf(n);} else {return "0" + String.valueOf(n);}}private String convert(long t) {int s = (int)(t % 60);int m = (int)((t / 60) % 60);int h = (int)((t / 3600));return h + ":" + pad(m) + ":" + pad(s);}
}

6、执行效果图。

六、源码路径

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

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

Android APP:Preference使用详解和实例(附源码)相关推荐

  1. Android App开发实战项目之购物车(附源码 超详细必看)

    需要源码请点赞关注收藏后评论区留言~~~ 一.需求描述 电商App的购物车可谓是司空见惯了,可以知道购物车除了底部有一个结算行,其余部分主要是已加入购物车的商品列表,然后每个商品左边是商品小图,右边是 ...

  2. WPF开发之Prism详解【内附源码】

    在实际应用开发中,随着项目业务逐渐复杂,耦合度会越来越高,维护成本也会直线上升,所以解耦也变得越来越重要.Prism框架为WPF开发中解耦提供了非常便捷的应用.今天主要以一个简单的小例子,简述WPF开 ...

  3. C#共享内存实例 附源码

    原文 C#共享内存实例 附源码 网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写.故对此进行了改进,并做了个小例子,供需要的人参考. 主要改进点: 通过利用共享内存的一部分空间(以下称 ...

  4. Android悬浮窗开启 适配所有机型(附源码)

    Android悬浮窗开启 适配所有机型(附源码) 1.开启悬浮窗权限 清单文件中添加: <uses-permission android:name="android.permissio ...

  5. Android App启动流程详解

    前言:在之前的文章中已经写了apk的打包流程.安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程.经过今天的梳理以后咱们就可以对apk包是怎么编译生成的.apk是怎么被安装到安卓手机的 ...

  6. Android 轻松实现语音识别详解及实例代码

    使用Intent调用语音识别程序 说明 Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如果找不到语音识别设备,就会抛出异常 ActivityNotFou ...

  7. Java源码详解四:String源码分析--openjdk java 11源码

    文章目录 注释 类的继承 数据的存储 构造函数 charAt函数 equals函数 hashCode函数 indexOf函数 intern函数 本系列是Java详解,专栏地址:Java源码分析 Str ...

  8. Java源码详解五:ArrayList源码分析--openjdk java 11源码

    文章目录 注释 类的继承与实现 构造函数 add操作 扩容函数 remove函数 subList函数 总结 本系列是Java详解,专栏地址:Java源码分析 ArrayList 官方文档:ArrayL ...

  9. Java源码详解三:Hashtable源码分析--openjdk java 11源码

    文章目录 注释 哈希算法与映射 线程安全的实现方法 put 操作 get操作 本系列是Java详解,专栏地址:Java源码分析 Hashtable官方文档:Hashtable (Java Platfo ...

最新文章

  1. pytorch强化学习训练倒摆小车
  2. Spring Cloud Config Server迁移节点或容器化带来的问题
  3. linux 查看 CPU 使用率
  4. 【guava】GuavaCache缓存失效的时候做一些操作 RemovalListener
  5. 吞食天地2完全版乱码怎么解决_PDF转Word如何转换?PDF转Word乱码怎么解决?
  6. matlab GUI画图实例——手动输入函数画图
  7. 项目管理之项目章程和三个重要说明书
  8. chrome打不开网页 转圈圈
  9. 使用逐浪CMS识别图片文字-揭秘新逐浪CMS之OCR识图功能
  10. 李嘉诚80个人生经典语录
  11. 干货分享 | 创业公司绝对不会告诉你他们在用的工具们
  12. Android音视频开发学习
  13. 控件库中的Botton控件简述
  14. CSS的浮动属性,附架构师必备技术详解
  15. Easycwmp_源码分析
  16. 【luogu CF1009F】Dominant Indices(长链剖分优化DP)
  17. ACM-SIAM离散算法研讨会SODA 2020今日召开
  18. 光遇测试服怎么显示服务器错误,光遇服务器错误怎么办_光遇服务器错误解决方法_3DM手游...
  19. POWERBI|行级别权限
  20. 引导滤波(guidedFilter)与边窗盒式滤波(sideWindowBoxFilter)的C++与OpenCV实现

热门文章

  1. Wakeup linux system from sleep mode
  2. Sketch的过去现在和未来
  3. C - 数据结构实验之栈与队列十:走迷宫
  4. 24岁了,做个精致的电子工程师
  5. 霍尼韦尔进一步加大在中国烯烃领域投入,成立中国烯烃技术支持中心
  6. 系统运维工具集SysAK使用说明
  7. 【Windows10自带杀毒软件关闭?】
  8. 词语接龙计算机教案,大班语言词语接龙教案.docx
  9. r2: 软工上机 人事管理系统 讨论点
  10. 红米9A android版本,红米9A适合老年人使用吗?