PreferenceActivity是android提供的对系统信息和配置进行自动保存的Activity,它通过SharedPreference方式将信息保存在XML 文件当中。使用PreferenceActivity不需要我们对SharedPreference进行信息保存读取操作,系统会自动对Activity 的各种View上的改变进行保存()。

可以自己实现一个,但是那样又会使Activity中的逻辑代码和xml布局文件过于复杂,远远不及PreferenceActivity来的方便快捷。

用他来自定义设置,省去了我们通过对SharedPreference设置的保存读取,很方便。PreferenceActivity在每次退出后都会自动记录下当前页面的设置,下次启动时会自动加载

这是根据hack004修改来的

一、效果图:

二、部分自定义实现类

自定义Prefeference

把view的点击事件传递给ImagePreference

package com.manning.androidhacks.hack004.preference;import com.manning.androidhacks.hack004.R;import android.content.Context;
import android.preference.Preference;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;public class ImagePreference extends Preference {private ImageView iv_perference_icon;private int _id;// 声明监听器private OnClickListener mOnClickListener;public ImagePreference(Context context, int id) {super(context);// TODO Auto-generated constructor stubthis._id = id;setLayoutResource(R.layout.preference_list_item_layout);}@Overrideprotected void onBindView(View view) {// TODO Auto-generated method stubsuper.onBindView(view);if (iv_perference_icon == null) {iv_perference_icon = (ImageView) view.findViewById(R.id.iv_perference_icon);iv_perference_icon.setImageResource(_id);view.setClickable(true);view.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {if (mOnClickListener != null)// 把view的点击事件传递给ImagePreferencemOnClickListener.onClick(view);elsereturn;}});}}// 设置ImagePreference的监听方法public void setOnClickListener(OnClickListener mOnClickListener) {this.mOnClickListener = mOnClickListener;}
}

三、主类;

import com.manning.androidhacks.hack004.preference.ImagePreference;import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.net.Uri;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
//MainActivit继承PreferenceActivity,其是ListActivity的子类
public class MainActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置背景this.getListView().setBackgroundResource(R.drawable.backgroud);addPreferencesFromResource(R.xml.prefs);initImagePreference();Preference sharePref = findPreference("pref_share");Intent shareIntent = new Intent();shareIntent.setAction(Intent.ACTION_SEND);shareIntent.setType("text/plain");shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Check this app!");shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this awesome app at: ...");sharePref.setIntent(shareIntent);Preference ratePref = findPreference("pref_rate");Uri uri = Uri.parse("market://details?id=" + getPackageName());Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);ratePref.setIntent(goToMarket);updateUserText();}private void initImagePreference() {getPreferenceScreen().setOrderingAsAdded(true);ImagePreference pre_update = new ImagePreference(this, R.drawable.update);// pre_update.setKey(Intents.KEY_UPDATE);pre_update.setTitle("更新");pre_update.setOrder(4);pre_update.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// You can do something here when somebady click this view.Toast.makeText(MainActivity.this, "版本升级", 1).show();}});getPreferenceScreen().addPreference(pre_update);}@Overrideprotected void onResume() {super.onResume();getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);}@Overrideprotected void onPause() {super.onPause();getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);}@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {if (key.equals("pref_username")) {updateUserText();}}private void updateUserText() {EditTextPreference pref;pref = (EditTextPreference) findPreference("pref_username");String user = pref.getText();if (user == null) {user = "请填写你的用户名";}pref.setSummary(String.format("Username: %s", user));}
}

五、布局文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"android:key="pref_first_preferencescreen_key"android:title="设置界面"><PreferenceCategoryandroid:title="User"><EditTextPreferenceandroid:key="pref_username"android:summary="Username:"android:title="用户名"/></PreferenceCategory><PreferenceCategoryandroid:title="Application"><Preferenceandroid:key="pref_rate"android:summary="Rate the app in the store!"android:title="在市场下载率"/><Preferenceandroid:key="pref_share"android:summary="Share the app with your friends"android:title="分享"/><com.manning.androidhacks.hack004.preference.EmailDialogandroid:dialogIcon="@drawable/ic_launcher"android:dialogTitle="Send Feedback"android:dialogMessage="Do you want to send an email with feedback?"android:key="pref_sendemail_key"android:negativeButtonText="Cancel"android:positiveButtonText="OK"android:summary="Send your feedback by e-mail"android:title="发送邮件"/><com.manning.androidhacks.hack004.preference.AboutDialogandroid:dialogIcon="@drawable/ic_launcher"android:dialogTitle="About"android:key="pref_about_key"android:negativeButtonText="@null"android:title="关于"/></PreferenceCategory></PreferenceScreen>

AboutDialog,EmailDialog为自定义控件

六、源码:

http://download.csdn.net/detail/xiaobijia/8197103

android 设置类PreferenceActivity相关推荐

  1. Android设置Settings:预读取设置的选项和更新设置结果【2】

      Android设置Settings:预读取设置的选项和更新设置结果[2] 本文在文章1的基础上,增加预读取历史的修改.设置值更新到设置选项中,同时,每一次更新都会实时更新到设置栏中.  res ...

  2. Android Bundle类 学习总结

    Android Bundle类 http://blog.csdn.net/randyjiawenjie/article/details/6651437 根据google官方的文档(http://dev ...

  3. android AtomicBoolean类的使用

    今天,简洁讲讲如何使用  AtomicBoolean这个类. 类 在java.util.concurrent.atomic包下,有AtomicBoolean , AtomicInteger, At ...

  4. Android Canvas类介绍和Android Draw Rect 坐标图示

    当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...

  5. Android生命周期帮助类,Android Service类与生命周期详细介绍_Android_脚本之家

    Android  Service类与生命周期 Service是Android四大组件与Activity最相似的组件,都代表可执行的程序,区别在于Service一直在后台运行且没有用户界面. 1.Ser ...

  6. Android点击图片随机,android 设置图片随机出现-两种方式

    android 设置图片随机出现-两种方式, 第一种方式:得到图片对应的Drawable实例,通过setImageDrawable(drawable)实现 //ImageView对应的id ivBg ...

  7. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有什么 ...

  8. android 手机壁纸源码,Android设置手机壁纸-源码(WallPaper)

    Android设置手机壁纸-源码(WallPaper) /** * Andorid设置手机屏幕的壁纸 * * @description: * @author ldm * @date 2016-5-4 ...

  9. Android 工具类

    前言 相信用过工具类的各位仁兄都觉得工具类好用,小弟不才,今天斗胆拿出自己感觉比较顺手的工具类. 1.Activity控制类 public class ActivityCollector{//acti ...

  10. android动画类

    android动画类有三种实现形式,分别是Property Animation,Frame Animation,Tween Animation.Tween Animation主要是实现图片的移动来实现 ...

最新文章

  1. 你一笑,AI就变聪明了?微软最新研究提出“微笑训练法”
  2. ios警告与提示对话框
  3. Linux(UOS) Qt不能播放音频的问题
  4. 电脑版企业微信_企业微信教育版功能更新啦!
  5. 列表-列表统计及删除方法扩展
  6. 【最小生成树】路线规划(nowcoder 217603)
  7. 程序员需要知道的8个Linux命令
  8. 前端性能——数据持久化
  9. 10条有用的可用性结论和指南
  10. sudo使用之实现权限分配
  11. 【控制理论】矩阵求逆引理推导及理解
  12. TiDB EcoSystem Tools 原理解读(一):TiDB-Binlog 架构演进与实现原理
  13. 穿行测试工作底稿 软件行业,CPA审计预习书(第5话)——风险评估工作底稿之了解被审计单位的内部控制、穿行测试和控制测试...
  14. C语言 | 什么是ANSI C标准?
  15. C#如何使用skinEngine控件换肤(更换皮肤)?
  16. 手动清除jwgkvsq.vmx病毒
  17. 关于COM中变体类型VARIANT
  18. 27款国外最新Photoshop色板
  19. 报税系统代理服务器地址6,报税系统服务器地址怎么填
  20. N1-防火墙的工作原理

热门文章

  1. Python 之pass 语句
  2. Webstorm全版本汉化包
  3. 电气原理图制图相关GB标准
  4. IDEA代码格式化后缩进符不正确
  5. PowerShell: 如何使用powershell处理Excel
  6. 收银系统服务器ip设置,如何修改打印机IP地址?
  7. 硬盘总是在计算机中消失了,我计算机的D盘,E盘和F盘都消失了,只有C盘了. 这是怎么回事? -d驱动器c驱动器...
  8. VB2010(3)整型运算
  9. StringUtils.hasText()说明
  10. 飞天诚信ROCKEY-ARM(标准锁)软件加密狗使用记录