某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

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


相关文章
|
3月前
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。
180 38
|
4月前
|
UED
「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
本篇将带你实现一个自定义评分星级组件,用户可以通过点击星星进行评分,并实时显示评分结果。为了让界面更具吸引力,我们还将添加一只小猫图片作为评分的背景装饰。
116 6
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。
89 5
|
5月前
|
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
在这篇博客中,我们将深入探讨 Element UI 中的自定义滚动条及弹出层管理技巧。文章详细介绍了 el-scrollbar 组件的使用和参数设置,以及 PopupManager 如何有效管理弹出层的 z-index。我们还将探讨如何实现灵活的全屏组件,利用 vue-popper 创建自定义弹出层,最后介绍 ClickOutside 指令的用法。这些高级技巧将帮助你提升 Element UI 应用程序的用户体验与交互灵活性。
555 1
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
122 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
546 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
5月前
|
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
163 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
145 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
深度解析 Uno Platform 中的 MVVM 模式:从理论到实践的全方位指南,助你轻松掌握通过 C# 与 XAML 构建高效可维护的跨平台应用秘籍
【8月更文挑战第31天】本文详细介绍如何在优秀的跨平台 UI 框架 Uno Platform 中实施 MVVM(Model-View-ViewModel)模式,通过一个简单的待办事项列表应用演示其实现过程。MVVM 模式有助于分离视图层与业务逻辑层,提升代码组织性、易测性和可维护性。Uno Platform 的数据绑定机制使视图与模型间的同步变得高效简便。文章通过构造 `TodoListViewModel` 类及其相关视图,展示了如何解耦视图与模型,实现动态数据绑定及命令处理,从而提高代码质量和开发效率。通过这一模式,开发者能更轻松地构建复杂的跨平台应用。
96 0
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
【7月更文挑战第28天】随着移动应用市场的发展,用户对界面设计的要求不断提高。Material Design是由Google推出的设计语言,强调真实感、统一性和创新性,通过模拟纸张和墨水的物理属性创造沉浸式体验。它注重色彩、排版、图标和布局的一致性,确保跨设备的统一视觉风格。Android Studio提供了丰富的Material Design组件库,如按钮、卡片等,易于使用且美观。
239 1

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
    14
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    6
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    14
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    64
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    6
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    7
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    3
  • 9
    Android实战经验之Kotlin中快速实现MVI架构
    5
  • 10
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    5