热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http:blog.csdn.netjiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow


也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!


               



一、写作前面

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

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

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



二、设置的细节

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

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

"1.0" encoding="utf-8"?>

"http://schemas.android.com/apk/res/android" >   

"First Category">        "list_key"            android:defaultValue="list key default value"            android:title="list title"            android:summary="list_summary"            android:entries="@array/list_preference"            android:entryValues="@array/list_preference"            android:dialogTitle="list_dialog_title" />       

"Second Category">        "edittext_key"            android:defaultValue="edit default value"            android:summary="edit summary"            android:title="edit title" />        "checkbox_key"            android:defaultValue="checkbox default value"            android:summary="checkbox summary"            android:title="checkbox title"            />                      "num_key"            android:defaultValue="0"            android:summary="edit summary"            android:numeric="integer"            android:title="input number" /> 

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

每一个Preference中的都会包含一个key(android:key),它的功能相当于普通layout中的id。
title:这一项的标题,字体比较大。

summary:摘要,标题下面的文字,字体较小。
defaultValue:为设置summary之前的默认值。

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

xml version="1.0" encoding="utf-8"?><resources>    <string-array name="list_preference">        <item>Reditem>        <item>Blueitem>        <item>Greenitem>      string-array>resources>

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类就可以运行起来了。其实就是这么简单。也许你会问,我们设置了自己的偏好值,程序中如何获得呢?

我们需要注册一个Preference变化的Listener来监听这些事件。当我们做好设置后,Preference已经替我们做好了数据持久化了。
我们可以用sharedPreference来获得这些值。
下面来看:


    @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来实现:

看看我的MainActivity:

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; }}

当然,就像用edit text一样,我们可以限制输入的是文字还是数字或者是字母。就像上面代码:android:numeric="integer"

完整代码在此:HowToPreferenceActivity

           


给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow



推荐阅读
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • 这两天用到了ListView,写下遇到的一些问题。首先是ListView本身与子控件的焦点问题,比如我这里子控件用到了Button,在需要ListView中的根布局属性上加上下面的这一个属性:and ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 【工具篇】抓包中的王牌工具—Fiddler (1环境搭建)
    本文介绍了抓包工具Fiddler的概述,包括其功能、选择原因和安装方法。Fiddler是一款免费且功能强大的抓包工具,可用于网络代理、接口测试、安全测试和WEB调试等。安装配置简单,上手快速,适合新手使用。详细的安装地址为https://www.telerik.com/download/fiddl。 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了10分钟了解Android的事件分发相关的知识,希望对你有一定的参考价值。什么是事件分发?大家 ... [详细]
  • Ubuntu18.04 安装ROS Melodic && Ros2 Dashing
    https:blog.csdn.netqq_44717317articledetails104547474一、Ubuntu18.04的安装ubuntu2go的制作关于Ubuntu2 ... [详细]
  • 2021年最详细的Android屏幕适配方案汇总
    1Android屏幕适配的度量单位和相关概念建议在阅读本文章之前,可以先阅读快乐李同学写的文章《Android屏幕适配的度量单位和相关概念》,这篇文章 ... [详细]
  • steam,2,7,2,已经,发布 ... [详细]
  • nginx使用内置模块配置限速限流的方法实例_nginx
    Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景,下面这篇文章主要给大家介绍了关于nginx使用内置模块配置限速限流的 ... [详细]
author-avatar
大廷705
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有