android设置界面preferences的使用

部分借鉴:http://blog.csdn.net/flowingflying/article/details/6671548,谢谢作者

步骤1:编写preference XML,在res/xml/下加入我们的preference XML文件,例如名字叫preference.xml(不是上图的布局文件)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <PreferenceScreen
 3     xmlns:android="http://schemas.android.com/apk/res/android">
 4
 5     <PreferenceCategory android:title="消息通知">
 6         <CheckBoxPreference android:title="开启声音" android:key="开启声音" android:summary="当有新消息通知时播放声音提示" android:defaultValue="true" />
 7         <CheckBoxPreference android:title="开启震动" android:key="开启震动" android:summary="当有新消息通知时震动提示" android:defaultValue="true" />
 8     </PreferenceCategory>
 9
10     <PreferenceCategory android:title="图片接收">
11         <CheckBoxPreference android:title="自动接收图片" android:key="自动接收图片" android:summary="GPRS,3G网络下自动接收并显示图片" android:defaultValue="false" />
12     </PreferenceCategory>
13
14     <PreferenceCategory android:title="显示" >
15         <CheckBoxPreference android:title="开启横屏模式" android:key="开启横屏模式" android:defaultValue="true" />
16         <CheckBoxPreference android:title="显示系统栏挂机图标" android:key="显示系统栏挂机图标" android:summary="后台运行时,在系统栏显示程序图标" android:defaultValue="true" />
17         <PreferenceScreen android:title="更换皮肤">
18             <intent android:targetPackage="com.genius.demo" android:targetClass="com.genius.demo.SkinActivity" />
19         </PreferenceScreen>
20     </PreferenceCategory>
21
22     <PreferenceCategory android:title="辅助功能">
23         <CheckBoxPreference android:title="开启截屏功能" android:key="开启截屏功能" android:summary="摇晃手机即可截图(在QQ外截图需root权限)" android:defaultValue="false" />
24         <CheckBoxPreference android:title="上报我的地理位置" android:key="上报我的地理位置" android:summary="上报地理位置信息以便附近的人能够找到我" android:defaultValue="false" />
25         <PreferenceScreen android:title="查看流量统计" android:summary="使用手机QQ所产生的上行和下行流量">
26             <intent android:targetPackage="com.genius.demo" android:targetClass="com.genius.demo.TrafficStatActivity" />
27         </PreferenceScreen>
28
29     </PreferenceCategory>
30
31     <PreferenceCategory android:title="帮助">
32         <PreferenceScreen android:title="反馈建议" android:summary="反馈建议">
33             <intent android:action="android.intent.action.VIEW" android:data="http://wap.3g.qq.com/g/s?aid=wapsupport&amp;amp;fid=647" />
34         </PreferenceScreen>
35         <PreferenceScreen android:title="好友设置" android:summary="好友设置">
36             <intent android:targetPackage="com.genius.demo" android:targetClass="com.genius.demo.FriendInfoActivity" />
37         </PreferenceScreen>
38     </PreferenceCategory>
39 </PreferenceScreen>

步骤2:在java源代码中调用该xml,生成相应的preference界面,同时可设置对应的监听操作,例如分享、自动加载更多等

  1 package com.maomao.beautymovie;
  2
  3
  4
  5 import android.app.ActionBar;
  6 import android.content.Intent;
  7 import android.os.Bundle;
  8 import android.preference.CheckBoxPreference;
  9 import android.preference.Preference;
 10 import android.preference.Preference.OnPreferenceChangeListener;
 11 import android.preference.Preference.OnPreferenceClickListener;
 12 import android.preference.PreferenceActivity;
 13 import android.view.MenuItem;
 14 import android.widget.Toast;
 15
 16 public class SettingActivity extends PreferenceActivity implements OnPreferenceClickListener,OnPreferenceChangeListener{
 17
 18     protected ActionBar mActionBar;
 19     private Preference pref_share;
 20     private CheckBoxPreference autoLoad_cbox;
 21     @SuppressWarnings("deprecation")
 22     protected void onCreate(Bundle savedInstanceState) {
 23         super.onCreate(savedInstanceState);
 24
 25         // Load the preferences from an XML resource
 26
 27
 28         initActionBar();
 29         addPreferencesFromResource(R.xml.setting_preference);
 30
 31         autoLoad_cbox = (CheckBoxPreference) findPreference("autoload");
 32         /**
 33          * Preference分享操作
 34          */
 35         pref_share=(Preference) findPreference("pref_share");
 36         pref_share.setOnPreferenceClickListener(this);
 37         autoLoad_cbox.setOnPreferenceChangeListener(this);
 38
 39
 40     }
 41
 42
 43
 44     private void initActionBar() {
 45         mActionBar = getActionBar();
 46         mActionBar.setDisplayHomeAsUpEnabled(true);             // 给左上角图标的左边加上一个返回的图标"《" 。对应ActionBar.DISPLAY_HOME_AS_UP
 47         mActionBar.setDisplayShowHomeEnabled(true);             //使左上角图标可点击,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME false 则图标无法点击
 48         mActionBar.setHomeButtonEnabled(true);                  // false 就无法点击
 49     }
 50
 51     @Override
 52     public boolean onOptionsItemSelected(MenuItem item) {
 53         if (item.getItemId() == android.R.id.home) {
 54             finish();
 55             return true;
 56         }
 57         return super.onOptionsItemSelected(item);
 58     }
 59
 60
 61
 62 //
 63 //    mCheckbox0.setOnPreferenceClickListener(new OnPreferenceClickListener() {
 64 //        @Override
 65 //        public boolean onPreferenceClick(Preference preference) {
 66 //            //这里可以监听到这个CheckBox 的点击事件
 67 //            return true;
 68 //        }
 69 //        });
 70 //    mCheckbox0.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
 71 //        @Override
 72 //        public boolean onPreferenceChange(Preference arg0, Object newValue) {
 73 //            //这里可以监听到checkBox中值是否改变了
 74 //            //并且可以拿到新改变的值
 75 //            Toast.makeText(mContext, "checkBox_0改变的值为" + (Boolean)newValue, Toast.LENGTH_LONG).show();
 76 //            return true;
 77 //        }
 78 //    });
 79 //
 80
 81
 82
 83
 84     /**
 85      * on share item click
 86      */
 87     public void onClickShare() {
 88         Intent intent = new Intent(Intent.ACTION_SEND);
 89         intent.setType("text/plain");
 90         intent.putExtra(Intent.EXTRA_SUBJECT, "分享");
 91         intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_text));
 92         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 93         startActivity(Intent.createChooser(intent, getTitle()));
 94     }
 95
 96     @Override
 97     public boolean onPreferenceClick(Preference preference) {
 98         // TODO Auto-generated method stub
 99         if(preference == pref_share){
100             onClickShare();
101             return true;
102         }
103      return false;
104     }
105
106
107
108     @Override
109     public boolean onPreferenceChange(Preference preference, Object newValue) {
110         if(preference == autoLoad_cbox){
111           //这里可以监听到checkBox中值是否改变了
112           //并且可以拿到新改变的值
113           Toast.makeText(this, "自动加载更多:" + (Boolean)newValue, Toast.LENGTH_SHORT).show();
114           return true;
115         }
116         return false;
117     }
118
119
120
121 }

和用layout方式一样,代码很简单。和以往界面最大的区别是,我们对checkbox进行选择或者对ringtone进行选择后,这个选择结果是被保留的,当我们退出actitvity后再次进入,上次的选项依然保留,我们重新向模拟器load应用,发现之前的选项仍然存在。我们可以利用preference,而无须人工对数据进行保存和读取,很是方便。

步骤3:获取preference的数据

处了在preference的界面中可以保留数据,我们也希望能够读出数据,以便这些数据可以用在其他的activity中。如果另一个activity和这些数据关联,而且希望能够实时进行同步,在onResume()中对preference保留的数据进行读取,而后进行相关的更新。

首先要获取preferences,然后通过键值对的获取方式根据key获取数值,在xml中checkbox的key为“checkbox”,值的类型为布尔值,而rintong的值为String,例如:

1    protected void onResume() { //在另一个Activity中
2         super.onResume();
3         SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
4         System.out.println(new Boolean(prefs.getBoolean("checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
5         System.out.println(prefs.getString("ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值
6     }

or:

1     @Override
2     public void onResume() {
3         SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(getActivity());
4         movieListView.setAutoLoadMore(prefs.getBoolean("autoload",false));
5         super.onResume();
6     }

PreferenceCategory也可以嵌套PreferenceScreen,PreferenceScreen中的内容,将通过另一屏来显示,我们在上面例子后面添加一个嵌套了PreferenceScreen的PreferenceCategory。整个PreferenceScreen作为一个组件出现,点击后新的一屏,由入PreferenceScreen定义。通过这个关系,我们可以组织自己的preference架构。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 3        <PreferenceCategory android:title="Simple Preferences">
 4             <CheckBoxPreference android:key="checkbox" ..../>
 5             <RingtonePreference android:key="ringtone" ... />
 6        </PreferenceCategory>
 7        <PreferenceCategory android:title="Detail Screens">
 8            <PreferenceScreen android:title="Detail"
 9                android:summary="Addtional preference help in another page">
10                <CheckBoxPreference android:key="checkbox2"
11                    android:title="Another Checkbox"
12                    android:summary="On or Off, It‘s a problem...."/>
13            </PreferenceScreen>
14        </PreferenceCategory>
15 </PreferenceScreen>
时间: 2024-10-04 04:33:51

android设置界面preferences的使用的相关文章

Android 设置界面修改为Iphone的tab菜单风格

好久没有写博客了!最近做了Android 设置的列表菜单风格改为Iphone的tab菜单风格的尝试!我知道,有许多朋友有自己的方式已经实现了这个界面风格的开发,今天大家来看看我的做法吧! 做这个开发前,首先要看看Android默认的设置列表菜单风格的实现!由 AndroidManifest.xml可以知道Settings这个Activity是我们关注的焦点!所以我们来到Settings.java来一探究竟,从中我们可以清除的知道他其实是一个PreferenceActivity,而Preferen

Android设置之UI篇

一.  Android设置界面是如何定义的呢? 答:Android 系统设置的主界面是Settings.java,该类的定义为: 同时我们看看Settings.java的onCreate函数: 这里似乎没有调用setContentView的方法,那么设置的界面是如何显示的呢?那我们去它的父类(PreferenceActivity)中找找看,我们来看看这个类的onCreate方法: 正如我们看到,原来设置的界面定义为framework中的preference_list_content.xml. 通

Android studio界面相关设置

Android studio界面相关设置 原文出自 http://www.cnblogs.com/justinzhang/p/4274839.html 用惯了emacs的操作方式,每当使用一款新的编辑器的时候,第一个想到的就是这个工具有没有emacs的快捷键,Android studio也是一样的. 1. Android studio设置emacs的方式如下,点击File->Settings 选择其中的keymap,在keymap中选择emacs,这样就成功的设置好了emacs的操作模式: 2.

android判断当前网络状态及跳转到设置界面

今天,想做这个跳转到网络设置界面, 刚开始用 intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 不料老是出现settings.WirelessSettings找不到(就是没法提示出来,显示红色底纹),我后来查了下资料,结果发现跟版本有关,我的是安卓4.3的,所以需要用                         intent = new Intent(android.provider.Settings.ACTION_WIRELES

Android:布局实例之常见用户设置界面

实现效果: 整理思路: 1.控件:文字TextView 和 右箭头ImageView 2.因为考虑到点击效果,设计为:最外层为全圆角,内层有四种情况,分别为上圆角.无圆角.下圆角和全圆角. 3.内层样式效果:需要初始样式.和点击样式 4.需要知识:结合style.shake.selector组合样式 布局: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android=

安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can&#39;t find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label

安卓工作室 android studio 汉化后,报错. 设置界面打不开. Android studio has been sinified and reported wrong.The setup interface cannot be opened. 安卓工作室 android studio 版本 2.3.3 Android studio version 2.3.3 汉化包版本 AndroidStudio_v2.0.0.20_resources_cn-v0.2-20170414.jar Lo

Android应用打开手机的网络设置界面

App应用离不开与服务器进行网络交互,但是有时间在网络信息不好的时间,我们要给用户提示让进行网络设置,在我们应用中一般会有一个网络加载错误(失败)的页面,上面有操作控件,点击可以进入手机的网络设置界面,代码很简单: /**intent对象*/ Intent intent = null; /**判断手机系统的版本 即API大于10 就是3.0或以上版本及魅族手机*/ if (android.os.Build.VERSION.SDK_INT > 10 && !android.os.Bui

Android 编程之天气预报闹钟启动服务设置界面加载--4

真个application讲的已经差不多了,在说完这一篇之后,我会上传源码到资源,喜欢的可以下载和学习,今天主讲闹钟启动设置,设置页面的加载 在Android系统中,闹钟和唤醒功能都是由Alarm Manager Service控制并管理的.我们所熟悉的RTC闹钟以及定时器都和它有莫大的关系.为了便于称呼,我常常也把这个service简称为ALMS.         另外,ALMS还提供了一个AlarmManager辅助类.在实际的代码中,应用程序一般都是通过这个辅助类来和ALMS打交道的.就代

Android 打开设置界面或者WiFi连接界面

1.使用APP打开系统的设置界面或者WiFi连接界面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网络设置界面 } startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS )); //直接进入手机中设置界面 }