Android实战技巧之六:PreferenceActivity使用详解

Android实战技巧之六:PreferenceActivity使用详解一 写作前面当我们做应用的时候 需要用户配置一些信息 而这就是通常所说的应用设置 对于 Android 系统来说 系统本身的设置带来的用户体验和习惯已经深入人心 在我们的应用中同样用到类似的设置页 那么用户使用起来就会更加亲切和方便 是吗 那我们应该怎么做到呢 这就要靠本文的主人公 PreferenceAc 了 二 设置的细节打开 Android 手机的设置 我们会看到整个

一、写作前面

当我们做应用的时候,需要用户配置一些信息,而这就是通常所说的应用设置。

对于Android系统来说,系统本身的设置带来的用户体验和习惯已经深入人心,在我们的应用中同样用到类似的设置页,

那么用户使用起来就会更加亲切和方便。是吗?那我们应该怎么做到呢?这就要靠本文的主人公PreferenceActivity了。

二、设置的细节

打开Android手机的设置,如下图:

Android实战技巧之六:PreferenceActivity使用详解

我们会看到整个页面被分为几组:无线网络、设备、个人、账户和系统。这个分组(或者叫分类)就是PreferenceCategory。

Wifi右边有开关,这一项就是CheckBoxPreference;其他还有ListPreference和EditTextPreference。

你的每一次设置,都会被Preference存下来,这就是setting的数据持久化。

三、如何实现自己的设置

下面我们来实现一个设置程序,看看PreferenceActivity的基本知识都有哪些。

首先要说的是,PreferenceActivity从API level1中就加入了,那么后续自Android3.0后有了Fragment的概念,同时也带来了PreferenceFragment,这是后话,今天我们先讲讲简单的。

这个例子有两个Activity组成,第一个是MainAcitivity,程序启动后直接到此,用来现实Setting中的各项设置内容;第二个是Setting,继承自PreferenceActivity,展示如何设置和数据存储操作等。我只是想演示PreferenceActivity相关的知识,UI是直接托的,layout中也用了Hardcode,请看官只是取其精华(如果有的话),去其糟粕。

1.Setting

先来说说重头戏PreferenceActivity,它并不像普通的Activity那样用layout来做自己的界面,它是用专属的xml/preference.xml来构建自己的界面,然后在类中加入此xml。

本例演示三种常用preference,如下代码:

preferenc.xml

 
   
   
    
     
    
    
     
     
     
    
  

我将这三项preference分成两组(PreferenceCategory),First Category和Second Category.

其中数组list_preference在array.xml中定义:

 
   
   
    
    
      Red 
     
    
      Blue 
     
    
      Green 
     
    
  

Setting中是怎样加入这些UI信息呢?

public class Setting extends PreferenceActivity implements OnSharedPreferenceChangeListener { private EditTextPreference mEtPreference; private ListPreference mListPreference; private CheckBoxPreference mCheckPreference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); initPreferences(); } private void initPreferences() { mEtPreference = (EditTextPreference)findPreference(Consts.EDIT_KEY); mListPreference = (ListPreference)findPreference(Consts.LIST_KEY); mCheckPreference = (CheckBoxPreference)findPreference(Consts.CHECKOUT_KEY); }

此时,这个setting类就可以运行起来了。其实就是这么简单。也许你会问,我们设置了自己的偏好值,程序中如何获得呢?

 @Override protected void onResume() { super.onResume(); // Setup the initial values SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); mListPreference.setSummary(sharedPreferences.getString(Consts.LIST_KEY, "")); mEtPreference.setSummary(sharedPreferences.getString(Consts.EDIT_KEY, "linc")); // Set up a listener whenever a key changes sharedPreferences.registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(Consts.EDIT_KEY)) { mEtPreference.setSummary( sharedPreferences.getString(key, "20")); } else if(key.equals(Consts.LIST_KEY)) { mListPreference.setSummary(sharedPreferences.getString(key, "")); } } }

到此,setting的功能就实现了。那么,在其他Activity中如何获得设置的值呢?也是用sharedPreference来实现:

package com.linc.howtopreferenceactivity; import android.os.Bundle; import android.preference.PreferenceManager; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private Button btnSetting,btnShow; private TextView tvCheckout,tvList,tvEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnSetting = (Button)findViewById(R.id.btn_setting); btnShow = (Button)findViewById(R.id.btn_show); btnSetting.setOnClickListener(buttonListener); btnShow.setOnClickListener(buttonListener); tvCheckout = (TextView)findViewById(R.id.tv_checkout); tvList = (TextView)findViewById(R.id.tv_list); tvEditText = (TextView)findViewById(R.id.tv_edittext); } private OnClickListener buttonListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()) { case R.id.btn_setting: startActivity(new Intent(MainActivity.this,Setting.class)); break; case R.id.btn_show: showSettingInfo(); break; } } }; private void showSettingInfo() { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); tvCheckout.setText(settings.getBoolean(Consts.CHECKOUT_KEY, false)+""); tvEditText.setText(settings.getString(Consts.EDIT_KEY, "")); tvList.setText(settings.getString(Consts.LIST_KEY, "linc")); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177283.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:53
下一篇 2026年3月26日 下午7:53


相关推荐

  • puppeteer爬虫教程_python爬虫入门最好书籍

    puppeteer爬虫教程_python爬虫入门最好书籍译者按: 本文通过简单的例子介绍如何使用Puppeteer来爬取网页数据,特别是用谷歌开发者工具获取元素选择器值得学习。原文: AGuidetoAutomating&am

    2022年8月2日
    12
  • 【C++进阶】 Visual Studio高效调试手段与技巧总结(经验分享)

    【C++进阶】 Visual Studio高效调试手段与技巧总结(经验分享)本文详细讲述 VisualStudio 常用的高效调试手段与技巧

    2026年3月18日
    2
  • SPPNet总结

    SPPNet总结背景:RCNN使用CNN作为特征提取器,首次使得目标检测跨入深度学习的阶段。但是在RCNN中,因为全连接层的神经元个数是固定的(权重矩阵的维数是固定的),所以采取对于每一个区域候选都需要首先将图片放缩到固定尺寸(227×227),然后为每个区域候选提取CNN特征的方案。这里存在两个瓶颈,第一重复为每个regionproposal提取特征是及其费时的,SelectiveSearch对于每幅图片产生2k左右个regionproposal,也就是意味着一幅图片需要经过2k次完整的CNN计算得到最终的结果。

    2022年5月2日
    51
  • 蓝桥杯知识点汇总:基础知识和常用算法

    蓝桥杯知识点汇总:基础知识和常用算法此系列包含蓝桥杯 软件类 所考察的绝大部分知识点 算法 和写算法题必备的 JAVA 的基础语法 API 对想从 C C 转到 JAVA 组以及初学算法的同学会有帮助

    2026年3月19日
    2
  • GitHub 和  GitLab区别

    GitHub 和  GitLab区别GitHub 和 GitLab 都是基于 web 的 Git 仓库 使用起来二者差不多 它们都提供了分享开源项目的平台 为开发团队提供了存储 分享 发布和合作开发项目的中心化云存储的场所 GitHub 作为开源代码库 拥有超过 900 万的开发者用户 目前仍然是最火的开源项目托管平台 GitHub 同时提供公共仓库和私有仓库 但如果使用私有仓库 是需要付费的 GitLab 解决了这个问题 你可以在上面创建私人的免费仓库 GitLab 让开发团队对他们的代码仓库拥有更多的控制 相比较 Gi

    2026年3月17日
    2
  • JavaScript跳转和打开新窗口

    JavaScript跳转和打开新窗口跳转 window location href www baidu com 跳转到百度首页 不打开新的浏览器窗口 等价于 html 中的 ahref www baidu com 打开新窗口 window open www baidu com 打开一个新的浏览器窗口 窗口网址 www baidu c ahref www baidu com

    2025年11月3日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号