某android平板项目开发笔记--自定义sharepreference UI

简介:
前言

  android对于小数据的存储,提供了一个很好的框架就是Sharepreference,但是,我们在做项目的时候会发现,官方自带的sharepreference 的UI 是远远满足不了我们的需要(例如,设置备份时间等),这个时候,就需要我们定制一个sharepreference UI,上网找了一下,发现,这方面的资料不多,不知道,是不是我用的关键字不对,导致,一直google 不出来…于是,我DEBUG 一下源码, 把大致的方法给debug 出来…

1.从源代码里面找线索之一

(1)官方的Sharepreference UI

share

从上图可以看出,官方用于做sharepreference 的UI 就只有5个而已,远远不能满足我们的需要,于是,我们就要想办法定制一个.(注意:MultiSelectListPreference(api 11 以后才支持..))

(2) 定制一个Sharepreference UI

1,效果图

麦库截图20120302191811

2,怎么做?

首先,我们看一下实现的类图:(从左往右)

share2

(1)上面的例子是一个对话框交互的首选项设置,于是,我就继承了DialogPreference,当然,如果只是开关设置的话,就请继承TwoStatePreference,如果,这两个,都满足不了你的需要,你可以选择直接继承Preference.

 

(2) 接下来,我们就是定制我们的Preference UI

关于定制

1,你可以直接使用代码

2,你可以写布局文件

 

这里,我选择写一个布局文件,就是效果图的那样了…

然后在构造方法中这样写:

public TimeSettingPreference(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.preference_timesetting); }

 

接着,在sharepreference配置的xml 加上

<com.achai.shop.preferences.TimeSettingPreference android:key="@string/shop_infor_name" android:title="@string/shop_infor_name" />

这样就完成了,对于sharepreference 自定义UI的配置.

2.从源代码里面找线索 之二

  只是,完成了一个UI是远远不够的,我们还需要把我们设置的值,存进SharePreference这个框架里面!

  以下内容,可能比较啰嗦…

FAQ:

1, 我们怎么控制DialogPreference和我们一直用的AlertDialog控件的方法一样吗?

2, 怎么把值存进Sharepreference 里面?

 

(1),第一次启动PreferenceActivity 流程图

share3

从上图可知,我们启动PreferenceActivity的时候,会初始化所有Preference UI,这就是为什么我们要把布局文件写在构造方法当中的原因.

(2) 调用过程

1,点击我们的UI,将会调用如图所示的方法

share4

2,点击确定或者取消以后,就会调用onDialogClosed,如下图所示

share4

与我们使用alertDialog 不同的是,DialogPreference 关闭的时候,统一调用onDialogClosed(boolean positiveResult)方法,确认还是取消,只要进行判断即可.

x

至此,我们搞清楚了,这个Dialogpreference 整个运行流程,接下来得问题是,怎么绑定我们的控件呢?

onCreateDialog() || onBindDialogView(View view) ?

如果,你的控件是写在xml 里面当中的,你就只能用onBindDialogView,一般而言我们不重写onCreateDialog()…

总结:

如果,你用的是DialogPreference,仅仅能用你至少需要重写:

  • onBindDialogView(View view)
  • onDialogClosed(boolean posittiveResult)

 

为了你的程序写得更好,你除了重写以上方法以外还需要重写

  • onSetInitialValue(boolean restoreValue, Object defaultValue)
  • onSaveInstanceState()
  • onRestoreInstanceState(Parcelable)

接下来,我们就要把我们的值,存进Sharepreference里面

3.从源代码里面找线索 之三

  这部分内容,就要把我们的值存到sharepreference里面,其实很简单..

1,在onDialogClosed 写好要保存的方式

@Override protected void onDialogClosed(boolean positiveResult) { // TODO Auto-generated method stub super.onDialogClosed(positiveResult); if (positiveResult) { setTime(); } }

2,写我们的setTime()方法即可..

private void setTime() { // shopStart.gett @SuppressWarnings("unused") //检查是否需要关闭依赖... final boolean wasBlocking = shouldDisableDependents(); int currentHour = shopStart.getCurrentHour(); int currentMinute = shopStart.getCurrentMinute(); //持久化值 persistString(currentHour+":"+currentMinute); //再次检查是否需要关闭依赖... final boolean isBlocking = shouldDisableDependents(); //更新所有依赖改变 if(isBlocking != wasBlocking) { notifyDependencyChange(isBlocking); } }

 

截个小图来表示一下:

麦库截图20120302204715

顺便给个建议,如果上网找不到资料的话,直接debug 源码,从源码中找出规律不失为一个好办法..

本文转自 liam2199 博客,原文链接: 

http://blog.51cto.com/youxilua/794733

  如需转载请自行联系原作者


相关文章
|
5天前
|
Android开发 算法 架构师
android的基础ui组件,这些知识点你会吗
android的基础ui组件,这些知识点你会吗
android的基础ui组件,这些知识点你会吗
|
5天前
|
Android开发 缓存 双11
android的基础ui组件,Android开发社招面试经验
android的基础ui组件,Android开发社招面试经验
android的基础ui组件,Android开发社招面试经验
|
4天前
|
Android开发 异构计算 前端开发
Android显示原理,安卓自定义view面试
Android显示原理,安卓自定义view面试
|
4天前
|
Android开发 开发者 容器
Android自定义View:MeasureSpec的真正意义与View大小控制
Android自定义View:MeasureSpec的真正意义与View大小控制
|
5天前
|
Java Android开发
Android 12 自定义底部导航栏
Android 12 自定义底部导航栏
22 4
|
6天前
|
存储 消息中间件 缓存
Android应用开发:实现自定义View的高效绘制
【5月更文挑战第12天】 在Android开发中,创建高性能的自定义视图是一项挑战,它要求开发者深入理解Android的绘图机制以及UI渲染过程。本文将探讨如何优化自定义View的绘制流程,减少不必要的重绘和布局计算,以提升应用的响应速度和流畅度。我们将介绍几种关键策略,包括利用硬件加速、缓存绘制内容和使用高效的数据结构来存储视图状态。通过实例分析和性能对比,读者将学会如何在自己的应用中运用这些技巧,从而打造出更加流畅和响应迅速的用户界面。
|
6天前
|
XML Android开发 数据格式
Android下自定义Button样式
Android下自定义Button样式
13 3
|
6天前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
|
6天前
|
搜索推荐 Android开发
自定义Android标题栏TitleBar布局
自定义Android标题栏TitleBar布局
11 1
|
6天前
|
前端开发 Java Android开发
Android UI底层绘制原理
Android UI底层绘制原理
14 0

热门文章

最新文章