Android 代碼實現preference組件

來源:互聯網
上載者:User

Preference主要實現一些配置資料,一些我們上次點擊選擇的內容,我們希望在下次應用調起的時候依然有效,無須使用者再一次進行配置或選擇。Android提供preference這個鍵值對的方式來處理這種情況,自動儲存這些資料,並立時生效,同時Android提供一種類似的layout的方式來進行Preference的布局。

Preference組件有ListPreference,EditTextPreference,CheckBoxPreference和SwitchPreference,相對於View中的ListView,EditText,CheckBox,Switch和RingtonePreference .

1.介紹Preference組件的相關屬性

android:key : 每個Preference控制項獨一無二的”ID”,唯一表示此Preference。

android:defaultValue : 預設值。 例如,CheckPreference的預設值可為”true”,預設為選中狀態;

EditTextPreference的預設值可為”110”。

android:enabled : 表示該Preference是否可用狀態。

android:title : 每個Preference在PreferenceScreen布局上顯示的標題——大標題

android:summary : 每個Preference在PreferenceScreen布局上顯示的標題——小標題(可以沒有)

android:persistent: 表示Preference元素所對應的值是否寫入sharedPreferen檔案中,如果是true,則表示寫

入;否則,則表示不寫入該Preference元素的值。

android:dependency: 表示一個Preference(用A表示)的可用狀態依賴另外一個Preference(用B表示)。B可用,

則A可用;B不可用,則A不可用。

android:disableDependentsState: 與android:dependency相反。B可用,則A不可用;B不可用,則A可用。




特性:ListPreference

android:dialogTitle:彈出控制項對話方塊時顯示的標題

android:entries:類型為array,控制項欲顯示的文本

android:entryValues:類型為array,與文本相對應的key-value鍵值對,value儲存至sharedPreference檔案


RingtonePreference

android:ringtoneType:響鈴的鈴聲類型,主要有:ringtone(音樂)、notification(通知)、alarm(鬧鈴)

、all(所有可用聲 音類型)。

android:showDefault :預設鈴聲,可以使用系統(布爾值---true,false)的或者自訂的鈴聲

android:showSilent :指定鈴聲是否為靜音。指定鈴聲包括系統預設鈴聲或者自訂的鈴聲


2.執行個體實現上述所講控制項

1> 代碼目錄結構


2>


3>xml相關檔案

a.xml-> setting_preference.xml

Preference的xml檔案不是放在res->layout下,而是需要建立一個xml檔案夾,將setting_preference.xml放置在該xml檔案夾下:

                                                                                                                        

b.layout->activity_main.xml
                
c.layout->activity_about.xml

    
d.value->array.xml

            Red        Green        Bule    

4>. java代碼實現

a. 常量ConstantUtil.java

package com.example.settingdemo;public class ConstantUtil {public static final String LIST_KEY = "list_key";public static final String EDIT_TEXT_KEY = "edit_text_key";public static final String CHECK_BOX_KEY = "check_box_key";public static final String SWITCH_KEY = "switch_key";public static final String RING_TONE_KEY = "ring_tone_key";public static final String PREFERENCE_KEY = "preference_key";public static final String MY_PREFERENCE_KEY = "my_preference_key";}

b. 主介面MainActivity.java

package com.example.settingdemo;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.preference.PreferenceManager;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private Button settingBtn, showSettingInfoBtn;private TextView showInfoTv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);settingBtn = (Button) this.findViewById(R.id.setting_btn);showSettingInfoBtn = (Button) this.findViewById(R.id.show_setting_info_btn);showInfoTv = (TextView) this.findViewById(R.id.show_info_tv);settingBtn.setOnClickListener(this);showSettingInfoBtn.setOnClickListener(this);}@Overridepublic void onResume() {super.onResume();showSettingInfo();}/** * 顯示設定資訊 */private void showSettingInfo() {SharedPreferences share = PreferenceManager.getDefaultSharedPreferences(this);StringBuffer info = new StringBuffer();String listInfo = share.getString(ConstantUtil.LIST_KEY, "Green");String editTextInfo = share.getString(ConstantUtil.EDIT_TEXT_KEY,"this is editTextPreference");boolean checkBoxInfo = share.getBoolean(ConstantUtil.CHECK_BOX_KEY,true);boolean switchInfo = share.getBoolean(ConstantUtil.SWITCH_KEY, true);String ringtoneInfo = share.getString(ConstantUtil.RING_TONE_KEY,"預設鈴聲");info.append("ListInfo:").append(listInfo).append("\n").append("editTextInfo:").append(editTextInfo).append("\n").append("checkBoxInfo:").append(checkBoxInfo).append("\n").append("switchInfo:").append(switchInfo).append("\n").append("ringtoneInfo:").append(ringtoneInfo).append("\n");showInfoTv.setText(info.toString());}@Overridepublic 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;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.setting_btn:Intent intent = new Intent(MainActivity.this, SettingActivity.class);startActivity(intent);break;case R.id.show_setting_info_btn:showSettingInfo();break;}}}

c. 設定介面SettingActivity.java

package com.example.settingdemo;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.OnSharedPreferenceChangeListener;import android.os.Bundle;import android.preference.CheckBoxPreference;import android.preference.EditTextPreference;import android.preference.ListPreference;import android.preference.Preference;import android.preference.Preference.OnPreferenceClickListener;import android.preference.PreferenceActivity;import android.preference.RingtonePreference;import android.preference.SwitchPreference;import android.widget.Toast;public class SettingActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener,OnPreferenceClickListener{private ListPreference mListPreference;private EditTextPreference mEditTextPreference;private CheckBoxPreference mCheckBoxPreference;private SwitchPreference mSwitchPreference;private Preference mPreference;private RingtonePreference mRingtonePreference;@SuppressWarnings("deprecation")@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);this.addPreferencesFromResource(R.xml.setting_preference);initPreference();}@SuppressWarnings("deprecation")private void initPreference(){mListPreference = (ListPreference) this.findPreference(ConstantUtil.LIST_KEY);mEditTextPreference = (EditTextPreference) this.findPreference(ConstantUtil.EDIT_TEXT_KEY);mCheckBoxPreference = (CheckBoxPreference) this.findPreference(ConstantUtil.CHECK_BOX_KEY);mSwitchPreference = (SwitchPreference) this.findPreference(ConstantUtil.SWITCH_KEY);mPreference = (Preference) this.findPreference(ConstantUtil.PREFERENCE_KEY);mRingtonePreference = (RingtonePreference) this.findPreference(ConstantUtil.RING_TONE_KEY);mPreference.setOnPreferenceClickListener(this);}@SuppressWarnings("deprecation")@Overridepublic void onResume(){super.onResume();SharedPreferences share = this.getPreferenceScreen().getSharedPreferences();setDefaultSummary(share);share.registerOnSharedPreferenceChangeListener(this);}@SuppressWarnings("deprecation")@Overridepublic void onPause(){super.onPause();this.getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);}/** * 設定組件小標題 * @param share */private void setDefaultSummary(SharedPreferences share){mListPreference.setSummary(share.getString(ConstantUtil.LIST_KEY, "Green"));mEditTextPreference.setSummary(share.getString(ConstantUtil.EDIT_TEXT_KEY, "this is editTextPreference"));mRingtonePreference.setSummary(share.getString(ConstantUtil.RING_TONE_KEY, "預設鈴聲"));}@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {// TODO Auto-generated method stubif(ConstantUtil.LIST_KEY.equals(key)){mListPreference.setSummary(mListPreference.getEntry());}else if(ConstantUtil.EDIT_TEXT_KEY.equals(key)){mEditTextPreference.setSummary(sharedPreferences.getString(key, "this is editTextPreference"));}else if(ConstantUtil.RING_TONE_KEY.equals(key)){mRingtonePreference.setSummary(sharedPreferences.getString(key, "預設鈴聲"));}}@Overridepublic boolean onPreferenceClick(Preference preference) {// TODO Auto-generated method stubif(ConstantUtil.PREFERENCE_KEY.equals(preference.getKey())){Intent intent = new Intent(SettingActivity.this,AboutActivity.class);startActivity(intent);}else if(ConstantUtil.MY_PREFERENCE_KEY.equals(preference.getKey())){Toast.makeText(this, "點擊MyPreference", Toast.LENGTH_SHORT).show();}return false;}}

d.跳轉介面AboutActivity.java

package com.example.settingdemo;import android.app.Activity;import android.os.Bundle;public class AboutActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_about);}}

5>. 清單AndroidManifest.xml

                                                                                                    

至此,本文已完成,大家可以試試。


原始碼下載連結:http://download.csdn.net/detail/a123demi/7564135




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.