zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    关于LINUX文件与目录的问题说明
    poj1094拓扑排序
    poj3026(bfs+prim)最小生成树
    快速幂
    hdu4255筛素数+广搜
    网易2012校园招聘笔试题目
    网新恒天2011.9.21招聘会笔试题
    HDU3344(小广搜+小暴力
    HDU3348(贪心求硬币数
    HDU3345广搜 (P,E,T,#)
  • 原文地址:https://www.cnblogs.com/ning1121/p/4378289.html
Copyright © 2011-2022 走看看