日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android实战技巧之六:PreferenceActivity使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、寫作前面

當我們做應用的時候,需要用戶配置一些信息,而這就是通常所說的應用設置。

對于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

[java] view plaincopy
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <PreferenceScreen?xmlns:android="http://schemas.android.com/apk/res/android"?>??
  3. ????<PreferenceCategory?android:title="First?Category">??
  4. ????????<ListPreference??
  5. ????????????android:key="list_key"??
  6. ????????????android:defaultValue="list?key?default?value"??
  7. ????????????android:title="list?title"??
  8. ????????????android:summary="list_summary"??
  9. ????????????android:entries="@array/list_preference"??
  10. ????????????android:entryValues="@array/list_preference"??
  11. ????????????android:dialogTitle="list_dialog_title"?/>???????
  12. ????</PreferenceCategory>??
  13. ????<PreferenceCategory?android:title="Second?Category">??
  14. ????????<EditTextPreference??
  15. ????????????android:key="edittext_key"??
  16. ????????????android:defaultValue="edit?default?value"??
  17. ????????????android:summary="edit?summary"??
  18. ????????????android:title="edit?title"?/>??
  19. ????????<CheckBoxPreference??
  20. ????????????android:key="checkbox_key"??
  21. ????????????android:defaultValue="checkbox?default?value"??
  22. ????????????android:summary="checkbox?summary"??
  23. ????????????android:title="checkbox?title"??
  24. ????????????/>????????????????
  25. ????????<EditTextPreference??
  26. ????????????android:key="num_key"??
  27. ????????????android:defaultValue="0"??
  28. ????????????android:summary="edit?summary"??
  29. ????????????android:numeric="integer"??
  30. ????????????android:title="input?number"?/>??
  31. ?</PreferenceCategory></PreferenceScreen>??

?

我將這三項preference分成兩組(PreferenceCategory),First Category和Second Category.


每一個Preference中的都會包含一個key(android:key),它的功能相當于普通layout中的id。
title:這一項的標題,字體比較大。

summary:摘要,標題下面的文字,字體較小。
defaultValue:為設置summary之前的默認值。

其中數組list_preference在array.xml中定義:

[html] view plaincopy
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <resources>??
  3. ????<string-array?name="list_preference">??
  4. ????????<item>Red</item>??
  5. ????????<item>Blue</item>??
  6. ????????<item>Green</item>????
  7. ????</string-array>??
  8. </resources>??

?

Setting中是怎樣加入這些UI信息呢?

[java] view plaincopy
  1. public?class?Setting?extends?PreferenceActivity?implements?OnSharedPreferenceChangeListener?{??
  2. ??????
  3. ????private?EditTextPreference?mEtPreference;??
  4. ????private?ListPreference?mListPreference;??
  5. ????private?CheckBoxPreference?mCheckPreference;??
  6. ??????
  7. ????@Override??
  8. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  9. ????????super.onCreate(savedInstanceState);??
  10. ??
  11. ????????addPreferencesFromResource(R.xml.preferences);??
  12. ????????initPreferences();??
  13. ????}??
  14. ??????
  15. ????private?void?initPreferences()?{??
  16. ????????mEtPreference?=?(EditTextPreference)findPreference(Consts.EDIT_KEY);??
  17. ????????mListPreference?=?(ListPreference)findPreference(Consts.LIST_KEY);??
  18. ????????mCheckPreference?=?(CheckBoxPreference)findPreference(Consts.CHECKOUT_KEY);??
  19. ????}??

?

此時,這個setting類就可以運行起來了。其實就是這么簡單。也許你會問,我們設置了自己的偏好值,程序中如何獲得呢?


我們需要注冊一個Preference變化的Listener來監聽這些事件。當我們做好設置后,Preference已經替我們做好了數據持久化了。
我們可以用sharedPreference來獲得這些值。
下面來看:

[java] view plaincopy
  1. ???@Override??
  2. ???protected?void?onResume()?{??
  3. ???????super.onResume();??
  4. ??
  5. ???????//?Setup?the?initial?values??
  6. ???????SharedPreferences?sharedPreferences?=?getPreferenceScreen().getSharedPreferences();??
  7. ???????mListPreference.setSummary(sharedPreferences.getString(Consts.LIST_KEY,?""));??
  8. ???????mEtPreference.setSummary(sharedPreferences.getString(Consts.EDIT_KEY,?"linc"));??
  9. ?????????
  10. ???????//?Set?up?a?listener?whenever?a?key?changes??
  11. ???????sharedPreferences.registerOnSharedPreferenceChangeListener(this);??
  12. ???}??
  13. ??
  14. ???@Override??
  15. ???protected?void?onPause()?{??
  16. ???????super.onPause();??
  17. ???????//?Unregister?the?listener?whenever?a?key?changes??
  18. ???????getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);??
  19. ???}??????
  20. ?????
  21. @Override??
  22. public?void?onSharedPreferenceChanged(SharedPreferences?sharedPreferences,?String?key)?{??
  23. ???????if?(key.equals(Consts.EDIT_KEY))?{??
  24. ????????mEtPreference.setSummary(??
  25. ???????????????????sharedPreferences.getString(key,?"20"));??
  26. ???????}?else?if(key.equals(Consts.LIST_KEY))?{??
  27. ????????mListPreference.setSummary(sharedPreferences.getString(key,?""));??
  28. ???????}??
  29. }??

?

到此,setting的功能就實現了。那么,在其他Activity中如何獲得設置的值呢?也是用sharedPreference來實現:


看看我的MainActivity:

[java] view plaincopy
  1. package?com.linc.howtopreferenceactivity;??
  2. ??
  3. import?android.os.Bundle;??
  4. import?android.preference.PreferenceManager;??
  5. import?android.app.Activity;??
  6. import?android.content.Intent;??
  7. import?android.content.SharedPreferences;??
  8. import?android.view.Menu;??
  9. import?android.view.View;??
  10. import?android.view.View.OnClickListener;??
  11. import?android.widget.Button;??
  12. import?android.widget.TextView;??
  13. ??
  14. public?class?MainActivity?extends?Activity?{??
  15. ??
  16. ????private?Button?btnSetting,btnShow;??
  17. ????private?TextView?tvCheckout,tvList,tvEditText;??
  18. ??????
  19. ????@Override??
  20. ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  21. ????????super.onCreate(savedInstanceState);??
  22. ????????setContentView(R.layout.activity_main);??
  23. ????????initView();??
  24. ????}??
  25. ??
  26. ????private?void?initView()?{??
  27. ????????btnSetting?=?(Button)findViewById(R.id.btn_setting);??
  28. ????????btnShow?=?(Button)findViewById(R.id.btn_show);??
  29. ????????btnSetting.setOnClickListener(buttonListener);??
  30. ????????btnShow.setOnClickListener(buttonListener);??
  31. ??????????
  32. ????????tvCheckout?=?(TextView)findViewById(R.id.tv_checkout);??
  33. ????????tvList?=?(TextView)findViewById(R.id.tv_list);??
  34. ????????tvEditText?=?(TextView)findViewById(R.id.tv_edittext);??
  35. ????}??
  36. ??????
  37. ????private?OnClickListener?buttonListener?=?new?OnClickListener()?{??
  38. ????????@Override??
  39. ????????public?void?onClick(View?v)?{??
  40. ????????????switch(v.getId())?{??
  41. ????????????case?R.id.btn_setting:??
  42. ????????????????startActivity(new?Intent(MainActivity.this,Setting.class));??
  43. ????????????????break;??
  44. ????????????case?R.id.btn_show:??
  45. ????????????????showSettingInfo();??
  46. ????????????????break;??
  47. ????????????}??
  48. ????????}??
  49. ????};??
  50. ??????
  51. ????private?void?showSettingInfo()?{??
  52. ????????SharedPreferences?settings?=?PreferenceManager.getDefaultSharedPreferences(this);??
  53. ????????tvCheckout.setText(settings.getBoolean(Consts.CHECKOUT_KEY,?false)+"");??
  54. ????????tvEditText.setText(settings.getString(Consts.EDIT_KEY,?""));??
  55. ????????tvList.setText(settings.getString(Consts.LIST_KEY,?"linc"));??
  56. ????}??
  57. ??????
  58. ????@Override??
  59. ????public?boolean?onCreateOptionsMenu(Menu?menu)?{??
  60. ????????//?Inflate?the?menu;?this?adds?items?to?the?action?bar?if?it?is?present.??
  61. ????????getMenuInflater().inflate(R.menu.main,?menu);??
  62. ????????return?true;??
  63. ????}??
  64. ??
  65. }??


當然,就像用edit text一樣,我們可以限制輸入的是文字還是數字或者是字母。就像上面代碼:android:numeric="integer"


完整代碼在此:HowToPreferenceActivity

?

轉載于:https://www.cnblogs.com/yaowen/p/7281828.html

總結

以上是生活随笔為你收集整理的Android实战技巧之六:PreferenceActivity使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。