Android ApiDemos示例解析(35):App->Preferences->Advanced preferences

前篇文章Android ApiDemo示例解析(31):App->Preferences->Launching preferences 中用到了Advanced preferences 中定义的AdvancedPreferences。

本篇具体介绍AdvancedPreferences, 这个例子称为Advanced ,是因为 它涉及到了自定义Preference, 并在一个工作线程中刷新某个Preference的值。

Preference 为显示在 PreferenceActivity (一般以列表显示)在某个偏好的基类。有点类似于显示在Activity中的某个View。Preference 实际存取 的是对应在Shared Preferences中一项,而Preference定义的key也就是用来访问Shared Preferences的key值。

和View 一样可以自定义View,在Android中也可以自定义Preference,用来显示管理应用自定义的程序偏好。本例 MyPreference 自定 义一个Preference 用来存储用户点击该Preference的次数,类型为整数,初始值定义为100。它在advanced_preferences.xml 对应的定义如下:

<com.example.android.apis.app.MyPreference

android:key=”my_preference”

android:title=”@string/title_my_preference”

android:summary=”@string/summary_my_preference”

android:defaultValue=”100″ />

Preference 定义了很多属性,比如Default Value, dependency, enabled, icon ,key 等等都有对应的方法来操作。并且提供了两个Listener:PreferenceChangeListener, PreferenceClickListener ,允许应用程序响应Preference值变化事件,或是用户点击Preference事件。

这里按照MyPreference 代码顺序说明一下 如何自定义一个Preference。

1. 派生于 Preference基类。

public class MyPreference extends 

Preference

2. 和自定义View类似可以为自定义Preference 自定义Layout。 MyPreference 使用 R.layout.preference_widget_mypreference  ,定义很简单只有一个TextView ,其id为mypreference_widget。 一般在 构造函数中使用setWidgetLayoutResource为Preference派生类设置Layout资源。

// This is the constructor 

called by the inflater
public MyPreference(Context context, AttributeSet attrs) {
 super(context, attrs); 

 setWidgetLayoutResource(R.layout.preference_widget_mypreference);
}

3. 如有需要为自定义的Layout中的View 设置属性,可以在onBindView(View view)中完成。下面代码为TextView设 置值为mClickCounter。

@Override
 protected void onBindView(View view) {
 super.onBindView(view);     

 // Set our custom views inside the layout
 final TextView myTextView
 = (TextView) view.findViewById(R.id.mypreference_widget);
 if (myTextView != null) {
 myTextView.setText(String.valueOf(mClickCounter));
 }
 }

4. 如果为该自定义Preference 在XML定义了初值,比如 MyPreference的初值android:defaultValue=”100″,我 们想在代码中使用这个初值来初始化变量mClickCounter 。mClickCounter 类型为整数,这个变量就是用来保存用户的按键次数 的。

@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
 // This preference type's value type is Integer, so we read the default
 // value from the attributes as an Integer.
 return a.getInteger(index, 0);
}

@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
 if (restoreValue) {
 // Restore state
 mClickCounter = getPersistedInt(mClickCounter);
 } else {
 // Set state
 int value = (Integer) defaultValue;
 mClickCounter = value;
 persistInt(value);
 }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索view
, textview
, android自定义view
, 自定义view
, value
, defaultvalue
, preference
, view自定义
, 自定义view加载xml
, TypedArray
, Preferences
, 自定义圆形view
, 自定义view圆环
删除Preference
android studio、android官网、android sdk、android开发、android sdk下载,以便于您获取更多的相关知识。

时间: 2024-10-28 02:48:56

Android ApiDemos示例解析(35):App-&gt;Preferences-&gt;Advanced preferences的相关文章

Android ApiDemos示例解析(30) App-&amp;gt;Preferences-&amp;gt;Preferences from XML

我们在前面的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 介绍了可以使用Shared Preferences来存储一些状态,Shared Preferences更一般的用法是用来存储一些应用程序偏好(设置). 包 android.preference 提供了很多类可以方便应用程序来显示和设置应用相关的偏好.当然你可以使用自定义的UI来配置这些程 序偏好.但使用android.preference中定义的类可以给用户一个统一的U

Android ApiDemos示例解析(43):App-&amp;gt;Service-&amp;gt;Remote Service Controller

Remote Service Controller 和使用Local Service的Android ApiDemo示例解析(40):App->Service->Local Service Controller 都是使用Service的"Started" 模式,RemoteService在 AndroidManifest.xml中的定义如下: <service android:name=".app.RemoteService" android:pr

Android ApiDemos示例解析(37):App-&amp;gt;Search-&amp;gt;Query Search Results

这个例子单独运行时(从Launcher启动),这时接受到的Intent不含ACTION_SEARCH,和一个普通的Activity没有什么两样. 在例(36)时,它是作为查询处理Activity用于显示用户查询内容. SearchQueryResults 在AndroidManifest.xml定义为 Searchable Activity: <intent-filter> <action android:name="android.intent.action.SEARCH&q

Android ApiDemos示例解析(14) App-&amp;gt;Activity-&amp;gt;Save &amp;amp; Restore State

Save & Restore State与之前的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 实现的 UI类似,但功能和实现方法稍有不同.(9)是通过Shared Preferences 和 Activity 的onPause() ,和onResume()来保持UI中 EditText 的值.本例是通过onSaveInstanceState(Bundle savedBundle) 来实现保持UI状态. 和onPause

Android ApiDemos示例解析(1) 创建ApiDemo示例

Android SDK中带有很多例子,其中ApiDemo详细介绍了Android平台主要API,分成了 App Content Graphics Media OS Text Views 几个大类,每个大类又分为几个小类,一共大约有 200多个实例,涵盖了Android OS API的各个方面:下面是所有示例的列表: App/Activity/Animation App/Activity/Custom Dialog App/Activity/Custom Title App/Activity/Di

Android ApiDemos示例解析(21) App-&amp;gt;Device Admin

Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager. 类 DevicePolicyManager 用于管理Android设备定义的一些策略,主要指密码定义的长度,密码是否要含大写字母,小写字母等设 置密码需要满足的规范,锁定设备或是清除所有用户数据,这个类一般需要配合DeviceAdminReceiver来使用. DeviceAdminReceiver派生于BroadcastReceiver,可以接受

Android ApiDemos示例解析(13) App-&amp;gt;Activity-&amp;gt;Reorder Activities

Reorder Activities 示例有四个相关的Activitives: ReorderOnLaunch, ReorderTwo,ReorderThree, ReorderFour.其中ReorderOnLaunch为主Activity,ReorderOnLaunch启动ReorderTwo ,ReorderTwo启动 ReorderThree,ReorderThree启动 ReorderFour. 这时在Activity的"back stack"有如下状态: ReorderFo

Android ApiDemos示例解析(12) App-&amp;gt;Activity-&amp;gt;Redirection

Redirection示例涉及到三个Acitivity: RedirectEnter, RedirectMain,RedirectGetter.示例的主Activity为 RedirectEnter ,RedirectEnter 启动 RedirectMain, 而Activity 会根据某个条件来决定是否将应用的控制权传给 RedirectGetter 或是保持在RedirectMain. 应用代码中使用到了Shared Preferences (在之前的示例中介绍过). RedirectMa

Android ApiDemos示例解析(10) App-&amp;gt;Activity-&amp;gt;QuickContactsDemo

QuickContactsDemo示例介绍了如果使用Content Provider来访问Android系统的Contacts 数据库. Content Provider为不同应用之间共享数据提供了统一的接口,通过对底层数据源的抽象,Content Provider实现了应用程序代码和数 据层分离.Android平台对大部分的系统数据库都提供了对应的Content Provider接口: Browser: 读取和修改Bookmark,Browser history或Web Searches. C