- 浏览: 130720 次
- 性别:
- 来自: 北京
最新评论
-
scpcyzxb:
[b][*][*][/b]
Java网络编程 -
choclover:
How to get android source code ...
Android:android.git.kernel.org 无法访问时下载源代码的解决方法 -
100432177:
你好 我想问下, 设置闹钟的时候点击 repeat 设置星 ...
关于闹钟源码中是如何设置两个闹钟的问题 -
Jack22:
莫言,也就是你来我这里说句话,别人都是看了就走,不太够意思
设计模式------单例模式 -
莫言_MoYan:
设计模式------单例模式
在开发应用程序的过程中我们有很大的机会需要用到参数设置功能,那么在Android应用中,我们如何实现参数设置界面及参数存储呢,下面我们来介
绍一下Android中的一个特殊Activity–PreferencesActivity。PreferencesActivity是Android
中专门用来实现程序设置界面及参数存储的一个Activity,我们用一个实例来简介如何使用PreferencesActivity。
下图是一个参数设置界面:
下载
(23.65 KB)
2010-5-22 10:49
以此为例我们来介绍一下如何实现这个界面。首先建立一个xml来描述这个界面,文件为res/xml/preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="PreferenceCategory 1">
<CheckBoxPreference
android:key="CheckBox1"
android:title="CheckBox"
android:summaryOn="某功能: 开启"
android:summaryOff="某功能: 关闭"
android:defaultValue="true"
/>
</PreferenceCategory>
<PreferenceCategory android:title="PreferenceCategory 2">
<PreferenceScreen android:title="二级PreferenceScreen">
<CheckBoxPreference
android:key="CheckBox2"
android:title="CheckBox"
android:summaryOn="某功能: 开启"
android:summaryOff="某功能: 关闭"
android:defaultValue="true"
/>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="PreferenceCategory 3">
<ListPreference
android:key="ListPreference"
android:title="ListPreference"
android:summary="ListPreference测试"
android:dialogTitle="ListPreference"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entriesvalue_list_preference"
/>
<EditTextPreference
android:key="EditTextPreference"
android:title="EditTextPreference"
android:summary="点击输入"
android:dialogTitle="输入设置"
/>
<RingtonePreference
android:key="RingtonePreference"
android:title="RingtonePreference"
android:summary="选择铃声"
/>
</PreferenceCategory>
</PreferenceScreen>
复制代码
这个例子中包括了PreferenceActivity中常见的几种组件,以下为具体介绍及用法:
PreferenceScreen:设置页面,可嵌套形成二级设置页面,用Title参数设置标题。
PreferenceCategory:某一类相关的设置,可用Title参数设置标题。
CheckBoxPreference:是一个CheckBox设置,只有两种值,true或false,可用Title参数设置标题,用summaryOn和summaryOff参数来设置控件选中和未选中时的提示。
下载
(14.01 KB)
2010-5-22 10:49
ListPreference:
下拉框选择控件,用Title参数设置标题,用Summary参数设置说明,点击后出现下拉框,用dialogTitle设置下拉框的标题,下拉框内显示
的内容和具体的值需要在res/values/array.xml中设置两个array来表示。图中的array.xml设置如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="entries_list_preference">
<item>test1</item>
<item>test2</item>
<item>test3</item>
</string-array>
<string-array name="entriesvalue_list_preference">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
</resources>
复制代码
下载
(19.72 KB)
2010-5-22 10:49
EditTextPreference:输入框控件,点击后可输入字符串设置。用Title参数设置标题,Summary参数设置说明,dialogTitle参数设置输入框的标题。
下载
(20.68 KB)
2010-5-22 10:49
RingtonePreference:铃声选择框,点击后可选择系统铃声。Title参数设置标题,Summary参数设置说明,dialogTitle参数设置铃声选择框的标题。
下载
(20.36 KB)
2010-5-22 10:49
以
上是PreferenceActivity的xml描述,那么在程序中我们只需要新建一个继承自PreferenceActivity的
Activity,然后在主程序中调用就可以了。这个PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现设置的存
储,PreferenceActivity创建后会自动创建一个配置文件/data/data/you_package_name
/shared_prefs/you_package_name_you_xml_name.xml。上例中自动生成的配置文件如下:<?xml
version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="EditTextPreference">12332312</string>
<string name="ListPreference">2</string>
<string name="RingtonePreference">content://settings/system/ringtone</string>
<boolean name="CheckBox1" value="true" />
<boolean name="CheckBox2" value="true" />
</map>
复制代码
要取得其中的值可以通过如下的方法:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
value = prefs.getString(”ListPreference”, “unset”);
设计自己的Android Preference
SeekBar Preference
Android提供了Preference供应用可以进行功能设置以及属性配置等操作,检查 android.preference可以看到Preference下有若干子类,例如常用的EditTextPreference、 CheckBoxPreference、ListPreference等。但是仅仅有这些是不够的。
在我现在的工作当中,应用里有这么一个场景,用户手指在屏幕滑动,应用绘制出移动的轨迹。
熟悉Android API Demo(可以在SDK/platforms/android-1.5/samples下找到)的人一定记得在graphics目录下,有一个 FingerPaint的类实现了类似上述功能。但是还远远实现不了我们的需要,–需求是要在Preference中实现挑选颜色和调整粗细。
当然,他山之石可以攻玉,FingerPaint还是提供了不错的例子,尤其是FingPaint中选择颜色所使用的另外一个类ColorPickerDialog基本上具备了我们想要的部分功能。
除了上面提到的FingerPaint之外,还可以从Android的源码中找到可以参考的 代码。从framework/base/core/java中,找到android.preference包,可以看到有一个 SeekBarPreference的类,–这是一个“烂尾”类,代码未完成,因此被Google打上了@hide的标签。因此需要稍加完善,才能加以使 用。
@Override protected void onBindDialogView(View view) { super.onBindDialogView(view); bar = (SeekBar) view.findViewById(R.id.seekbar); bar.setOnSeekBarChangeListener(this); bar.setProgress(barValue); } public void setValue(int value) { barValue = value; } public int getValue() { return barValue; } @Override protected void onDialogClosed(boolean positiveResult) { if (positiveResult) { this.getOnPreferenceChangeListener().onPreferenceChange(this, barValue); } }
Color Picker Preference
在这个类的改造过程中,override两个父类方法是关键所在,一个是onBindDialogView,另一个是onDialogClosed。
通过第一个方法,我们可以“找到”被当做content view的SeekBar的实例,进而可以获得到其progress。
通过第二个方法,我们可以方便的通知到Listener,告诉它,SeekBar的值有变 化。这里我们把SeekBar的值,即progress看做是SeekBarPreference的value。除了这两个方法之外,就是要增加 setValue和getValue两个方法了。
如果不看代码的话,就会有疑问:SeekBar是如何进入Diglog的呢?它正式通过DialogPreference的属性android:dialogLayout得以注入:
<net.poemcode.android.config.SeekBarPreference android:key="@string/setting_handwrite_width_key" android:title="@string/setting_handwrite_width_title" android:dialogTitle="@string/setting_handwrite_width_title" android:dialogLayout="@layout/setting_widthseekbar" android:persistent="true"/>
依此原理,可以举一反三,对于如何实现选择颜色是不是有了思路?
首先实现一个视图,负责展现不同颜色和接收用户选中的颜色,其可以从 SeekBarPreference中的内部类ColorPickerView加以改造完成;然后新增一个布局文件,将刚才的视图加入到布局当中;接着继 承DialogPreference实现自己的Preference子类ColorPickerPreference;最后在XML文件里增加这个 Preference并把刚才的布局文件通过dialogLayout属性加入进去。从而实现了整个功能。
public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener { private static final String TAG = "SeekBarPreference"; private SeekBar bar; private int barValue; public SeekBarPreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); bar = (SeekBar) view.findViewById(R.id.seekbar); bar.setOnSeekBarChangeListener(this); bar.setProgress(barValue); } public void setValue(int value) { barValue = value; } public int getValue() { return barValue; } @Override protected void onDialogClosed(boolean positiveResult) { if (positiveResult) { this.getOnPreferenceChangeListener().onPreferenceChange(this, barValue); } } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { Log.d(TAG, "onProgressChanged, progress : " + progress + ", fromUser : " + fromUser); } public void onStartTrackingTouch(SeekBar seekBar) { Log.d(TAG, "onStartTrackingTouch"); } public void onStopTrackingTouch(SeekBar seekBar) { barValue = seekBar.getProgress(); } }
发表评论
-
Android程序运行时权限与文件系统权限的区别
2012-07-05 16:41 1513要区分apk运行时的拥有的权限与在文件系统上被访问(读写 ... -
Android中如何修改系统时间(应用程序获得系统权限)
2012-07-05 16:39 1197在 android 的API中有提供 SystemClo ... -
Android模拟器的一些问题
2011-12-08 10:10 1649最近在公司开发一款4.0手机,苦于新的板子没有到货,只好 ... -
Android 对话框(Dialog)大全 建立你自己的对话框
2011-12-01 14:03 1134Activities提供了一种方便管理的创建、保存、回复 ... -
Android:android.git.kernel.org 无法访问时下载源代码的解决方法
2011-10-21 10:58 9613今天正准备编译Android源码,根据官网的指示,首先应该执行 ... -
ubuntu开发环境下eclipse的alt+/自动补全功能不能用
2011-10-19 14:12 7103在ubuntu系统下,运行eclipse后发现已经用的相当顺手 ... -
android ndk 之Android.mk编写
2011-10-18 15:28 918转载:http://aswang.iteye.com/b ... -
Java网络编程
2011-08-24 10:52 1648Java的基本网络支持 1. InetAddre ... -
在eclipse中导入gingerbread源代码后出现如下build path错误
2011-08-04 13:53 1583Project 'gingerbread' is missin ... -
Android的AVD不能启动模拟器的问题
2011-07-27 12:39 2925这两天把android的SDK更新到3.2 ADT插件更新到 ... -
android的wifi模块中AIDL的通讯
2011-07-26 10:58 1782android系统中的wifi的前端显示在应用Settin ... -
ubuntu 11.04下搭建android开发/编译环境 安装必要工作用软件
2011-07-15 11:14 2586在ubuntu下工作一段时间 ... -
改变Eclipse提示框的黑色背景
2011-07-14 17:56 10656【问题描述】 最新版的Eclipse 3.6跟最新 ... -
Android的logcat用法
2011-07-13 10:35 23450android的logcat详细用法 Android日志系 ... -
android 源代码 debug
2011-07-12 17:56 3440用eclipse + ADT作为android开发工 ... -
Broadcast简介
2011-07-06 20:18 5549在Android中,Broadcast是一种广泛运用的在 ... -
android 遇到的问题 SSID BSSID ESSID
2011-07-05 20:41 2559随着无线技术的普 ... -
Android 中的WiFi学习笔记(转载)
2011-07-04 10:52 8053Android的WiFi 我们通常看到WiFi的守护 ... -
读源码心得
2011-06-28 15:44 5931. XML中变量的命名 : 功能描述_类型 比如alarm ... -
Parcelable
2011-06-28 15:31 1028android提供了一种新的类型:Parcel。本类被用作封装 ...
相关推荐
PreferenceActivity用法简介 Android X
Android之PreferenceActivity简介,Android之PreferenceActivity简介
NULL 博文链接:https://2528.iteye.com/blog/1049177
使用 PreferenceActivity设置个性信息, 参考:android 设置类PreferenceActivity http://blog.csdn.net/xiaobijia/article/details/41479235
雨松MOMO带你做软件 Android软件开发之PreferenceActivity中组件的使用 ,欢迎大家下载阅读 哇咔咔~~
自定义PreferenceActivity,达到自己想要的ui效果
android PreferenceActivity中的组件源码~
这个示例 PreferenceActivity 类的用法,它可以保存设置
仿IOS的PreferenceActivity界面,素材来自新浪微博,相关博文:http://www.cnblogs.com/tianzhijiexian/p/3893504.html
自定义PreferenceActivity的样式,相关博客:http://www.cnblogs.com/tianzhijiexian/p/3892506.html
NULL 博文链接:https://topmanopensource.iteye.com/blog/1291071
android中PreferenceActivity详解
NULL 博文链接:https://justwyy.iteye.com/blog/1338864
android之PreferenceActivity使用详解
android老知识了,有个老项目回顾一个PreferenceActivity
看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找。PerferenceActivity是什么,看下面的截图: Android系统截图(左) ...
最近研究了Android Setting中源码部分,发现大多视图显示部分大多采用的是Preference,所以我修改了系统设置中的一个界面希望能帮助到大家
android 开发者指南 ,我们看到Android系统本身就大量...看出来了吧,Preference,对就是使用SharedPreferneces以键值对的形式进行保存的,当然,我们也可以通过SharedPreferences来获取PreferenceActivity设置的值。