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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM