- 浏览: 87826 次
- 性别:
- 来自: 北京
最新评论
-
LiuYiJie2007:
public static String getPublicK ...
Android publickey获取 -
LiuYiJie2007:
getPublicKey( )是你自己写法方法 是什么?new ...
Android publickey获取 -
liujia9234:
我试了,不行,最不靠谱了
最靠谱的禁止ViewPager滑动方法 -
kedongjun:
非常强大
关于android通讯录加载大数据的优化问题 -
xunhuan01:
view.getImageMatrix(), savedMat ...
多点触摸放大图片的自定义listener
在开发应用程序的过程中我们有很大的机会需要用到参数设置功能,那么在Android应用中,我们如何实现参数设置界面及参数存储呢,下面我们来介绍一下Android中的一个特殊Activity–PreferencesActivity。PreferencesActivity是Android中专门用来实现程序设置界面及参数存储的一个Activity,我们用一个实例来简介如何使用
1.PreferencesActivity。
下图是一个参数设置界面:
以此为例我们来介绍一下如何实现这个界面。首先建立一个xml来描述这个界面,文件为res/xml/preferences.xml
这个例子中包括了PreferenceActivity中常见的几种组件,以下为具体介绍及用法:
PreferenceScreen:设置页面,可嵌套形成二级设置页面,用Title参数设置标题。
PreferenceCategory:某一类相关的设置,可用Title参数设置标题。
CheckBoxPreference:是一个CheckBox设置,只有两种值,true或false,可用Title参数设置标题,用summaryOn和summaryOff参数来设置控件选中和未选中时的提示。
ListPreference:下拉框选择控件,用Title参数设置标题,用Summary参数设置说明,点击后出现下拉框,用dialogTitle设置下拉框的标题,下拉框内显示的内容和具体的值需要在res/values/array.xml中设置两个array来表示。图中的array.xml设置如下:
EditTextPreference:输入框控件,点击后可输入字符串设置。用Title参数设置标题,Summary参数设置说明,dialogTitle参数设置输入框的标题。
RingtonePreference:铃声选择框,点击后可选择系统铃声。Title参数设置标题,Summary参数设置说明,dialogTitle参数设置铃声选择框的标题。
以上是PreferenceActivity的xml描述,那么在程序中我们只需要新建一个继承自PreferenceActivity的Activity,然后在主程序中调用就可以了。这个PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。上例中自动生成的配置文件如下
要取得其中的值可以通过如下的方法:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
value = prefs.getString(”ListPreference”, “unset”);
2.设计自己的Android 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两个父类方法是关键所在,一个是onBindDialogView,另一个是onDialogClosed。
通过第一个方法,我们可以“找到”被当做content view的SeekBar的实例,进而可以获得到其progress。
通过第二个方法,我们可以方便的通知到Listener,告诉它,SeekBar的值有变化。这里我们把SeekBar的值,即progress看做是SeekBarPreference的value。除了这两个方法之外,就是要增加setValue和getValue两个方法了。
如果不看代码的话,就会有疑问:SeekBar是如何进入Diglog的呢?它正式通过DialogPreference的属性android:dialogLayout得以注入:
依此原理,可以举一反三,对于如何实现选择颜色是不是有了思路?
首先实现一个视图,负责展现不同颜色和接收用户选中的颜色,其可以从SeekBarPreference中的内部类ColorPickerView加以改造完成;然后新增一个布局文件,将刚才的视图加入到布局当中;接着继承DialogPreference实现自己的Preference子类ColorPickerPreference;最后在XML文件里增加这个Preference并把刚才的布局文件通过dialogLayout属性加入进去。从而实现了整个功能。
1.PreferencesActivity。
下图是一个参数设置界面:
以此为例我们来介绍一下如何实现这个界面。首先建立一个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="[img][/img]点击输入" 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参数来设置控件选中和未选中时的提示。
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>
EditTextPreference:输入框控件,点击后可输入字符串设置。用Title参数设置标题,Summary参数设置说明,dialogTitle参数设置输入框的标题。
RingtonePreference:铃声选择框,点击后可选择系统铃声。Title参数设置标题,Summary参数设置说明,dialogTitle参数设置铃声选择框的标题。
以上是PreferenceActivity的xml描述,那么在程序中我们只需要新建一个继承自PreferenceActivity的Activity,然后在主程序中调用就可以了。这个PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。上例中自动生成的配置文件如下
<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”);
2.设计自己的Android 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); } }
在这个类的改造过程中,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_低版本使用ActionBar
2014-08-26 11:09 1096转载 http://blog.csdn.net/tianjf0 ... -
如何屏蔽android webview高度选中框
2014-02-19 12:04 747如标题所述,解决方法是在 html的样式中加入 *{-webk ... -
屏蔽ScrollView惯性滚动的方法
2013-08-08 13:36 5714ScrollView中有一种惯性滚动的效果,想让这个Scrol ... -
android 图片LOMO效果
2013-07-25 13:59 872import android.graphics.Bitmap; ... -
GitHub最火的android 项目
2013-07-25 13:14 780GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到 ... -
listview 点击列表项时,项中的Button会触发点击效果
2013-06-05 19:21 1284开发中,难免会在列表项中, 加入Button ,而button ... -
圆形不滚动的进度条
2013-05-17 11:38 849这种效果的进度条 代码如下: package com. ... -
最靠谱的禁止ViewPager滑动方法
2013-05-15 14:44 4957最近做项目要求某种情况下ViewPager不能滑动,在网上找了 ... -
viewpager主页面响应子页面 onkeydown事件的方法
2013-05-13 19:35 1618大家在开发中不少地方要用到ViewPager这个类,ViewP ... -
Mina 学习笔记 TCP主要接口
2013-05-05 23:21 1225(1.)IoService: 这个接口 ... -
android动画插件器
2013-04-27 10:01 830首先要了解为什么需要插值器,因为在补间动画中,我们一般只定义关 ... -
imageView 的 android:maxHeight,maxWidth属性
2013-03-29 10:17 816大家使用android:maxHeight,maxWidth属 ... -
android中获取下载地址文件的类型的方法
2013-03-28 11:33 1025MimeTypeMap mimeTypeMap = Mime ... -
res与res-auto的区别
2013-03-27 14:55 3961通常我们在布局文件中使用自定义属性的时候 会这样写 xmln ... -
滑动开关控件
2013-03-26 22:39 815public class SlidButton exten ... -
TextView使用SpannableString设置复合文本
2013-03-23 23:35 8791、BackgroundColorSpan 背景色 Sp ... -
Android编程之SparseArray<E>详解
2013-03-21 23:03 985一、构造 从构造方法我 ... -
判断系统是否支持 DownloadManager服务
2013-03-18 14:25 862public static boolean isDownloa ... -
android ndk native_activity.h
2013-03-12 15:25 1767#ifndef ANDROID_NATIVE_ACTIVITY ... -
android ndk obb.h
2013-03-12 15:14 1133#ifndef ANDROID_OBB_H #define A ...
相关推荐
PreferenceActivity用法简介 Android X
这篇博客将深入探讨PreferenceActivity的使用方法和相关知识点。 首先,PreferenceActivity是Android SDK提供的一个基类,它继承自Activity并添加了对Preference(偏好)的支持。通过使用PreferenceActivity,...
例如,可以在`onPreferenceChange`回调方法中处理这些事件,以确保应用的行为与用户的选择一致。 #### 七、总结 PreferenceActivity为开发者提供了一个强大的工具箱,可以快速构建复杂的设置界面。通过理解其工作...
然后在PreferenceActivity的onCreate()方法中加载这个XML文件,通常使用addPreferencesFromResource()方法。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate...
本篇文章将深入探讨PreferenceActivity的使用方法以及相关知识点。 首先,我们了解`PreferenceActivity`的基本概念。`PreferenceActivity`是继承自`ListActivity`的一个类,主要用于展示一个基于列表的偏好设置界面...
为了在代码中使用PreferenceActivity,我们需要继承PreferenceActivity类,并在onCreate()方法中调用addPreferencesFromResource()方法,传入包含偏好设置的XML资源ID: ```java public class SettingsActivity ...
标题中的“继承...虽然在最新的开发中可能较少直接使用,但理解它的工作原理和用法对于学习Android系统的设置机制和历史发展仍然非常重要。通过阅读提供的博客文章,开发者可以获得更深入的实践指导和技巧。
在`PreferenceActivity`中,我们需要通过覆盖`onCreate()`方法,并调用`addPreferencesFromResource(int)`来加载这个XML文件。例如: ```java public class SettingsActivity extends PreferenceActivity { @...
虽然Android 3.0(API级别11)之后推荐使用`PreferenceFragment`替代`PreferenceActivity`,但仍然可以通过自定义布局和重写方法来实现`PreferenceActivity`的高级定制。例如,可以覆盖`onCreateHeaderView`来创建...
在Android开发中,`PreferenceActivity`是用于创建设置界面的标准组件。它允许开发者通过XML文件定义各种偏好选项,如开关、单选按钮、多选按钮等,并将它们以活动的形式展示给用户。然而,标准的`...
在这个主题下,我们将深入探讨`PreferenceActivity`的工作原理、使用方法以及相关实践。 ### `PreferenceActivity`简介 `PreferenceActivity`继承自`ListActivity`,它会自动将`Preference` XML布局文件中的各项...
"仿IOS的PreferenceActivity界面"就是一个这样的实践,它主要涉及到Android的Preference类和Activity的使用,以及UI样式的美化。PreferenceActivity是Android系统提供的一种用于展示设置界面的特殊Activity,它能够...
默认情况下,PreferenceActivity会使用一个列表视图(ListView)来显示设置项。要改变这个布局,我们可以在XML中创建一个新的布局文件,例如`custom_preference_layout.xml`,然后在我们的Activity中覆盖`...
2. **加载XML布局**:在`PreferenceActivity`中,我们需要使用`addPreferencesFromResource(int resId)`方法来加载XML布局文件。`resId`参数是指向XML布局资源的ID。 3. **交互处理**:`Preference`类会自动处理...
这篇学习笔记将深入探讨PreferenceActivity的使用方法、功能以及与源码相关的知识。 首先,PreferenceActivity是Android SDK提供的一种特殊类型的Activity,它允许开发者快速构建具有可配置选项的界面,类似于系统...
本篇文章将深入探讨`PreferenceActivity`的使用方法及其相关知识点。 ### `PreferenceActivity`简介 `PreferenceActivity`是Android SDK提供的一种特殊类型的Activity,专门用来展示和管理用户偏好设置。它继承自`...
- 可能讨论了一些辅助工具或库,如使用PreferenceFragmentCompat替换老版本的PreferenceActivity,或者使用第三方库如PreferenceFragmentX来增强功能和性能。 - 自定义工具可能包括自动化测试工具,用于检测UI性能...
随着Android版本的更新,谷歌推荐使用PreferenceFragment替代PreferenceActivity,因为前者可以在任何类型的Activity中使用,而不仅仅限于PreferenceActivity。使用PreferenceFragment,你需要创建一个Fragment,并...