編輯:關於Android編程
當我們做應用的時候,需要用戶配置一些信息,而這就是通常所說的應用設置。
對於Android系統來說,系統本身的設置帶來的用戶體驗和習慣已經深入人心,在我們的應用中同樣用到類似的設置頁,
那麼用戶使用起來就會更加親切和方便。是嗎?那我們應該怎麼做到呢?這就要靠本文的主人公PreferenceActivity了。
打開Android手機的設置,如下圖:
我們會看到整個頁面被分為幾組:無線網絡、設備、個人、賬戶和系統。這個分組(或者叫分類)就是PreferenceCategory。
Wifi右邊有開關,這一項就是CheckBoxPreference;其他還有ListPreference和EditTextPreference。
你的每一次設置,都會被Preference存下來,這就是setting的數據持久化。
下面我們來實現一個設置程序,看看PreferenceActivity的基本知識都有哪些。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ytfPyNKqy7W1xMrHo6xQcmVmZXJlbmNlQWN0aXZpdHm000FQSSBsZXZlbDHW0L7NvNPI68HLo6zEx8O0uvPQ+NfUQW5kcm9pZDMuMLrz09DBy0ZyYWdtZW50tcS4xcTuo6zNrMqx0rK0+MC0wctQcmVmZXJlbmNlRnJhZ21lbnSjrNXiyse687uwo6y98czsztLDx8/IvbK9srzytaW1xKGjPC9wPgo8cD7V4rj2wP3X09PQwb249kFjdGl2aXR51+mzyaOstdrSu7j2ysdNYWluQWNpdGl2aXR5o6yzzNDyxvS2r7rz1rG907W9tMujrNPDwLTP1sq1U2V0dGluZ9bQtcS498/uyejWw8TayN2ju7Xatv649srHU2V0dGluZ6OsvMyz0NfUUHJlZmVyZW5jZUFjdGl2aXR5o6zVucq+yOe6zsno1sO6zcr9vt205rSistnX97XIoaPO0ta7ysfP69Hdyr5QcmVmZXJlbmNlQWN0aXZpdHnP4LnYtcTWqsq2o6xVScrH1rG9083QtcSjrGxheW91dNbQ0rLTw8HLSGFyZGNvZGWjrMfrv7S52da7ysfIocbkvqu7qqOoyOe5+9PQtcS7sKOpo6zIpcbk1OPGyaGjPC9wPgo8cD4xLlNldHRpbmc8L3A+CjxwPs/IwLTLtcu11tjNt8+3UHJlZmVyZW5jZUFjdGl2aXR5o6zL/LKisrvP8cbVzai1xEFjdGl2aXR5xMfR+dPDbGF5b3V0wLTX9tfUvLq1xL3nw+ajrMv8ysfTw9eoyvS1xHhtbC9wcmVmZXJlbmNlLnhtbMC0ubm9qNfUvLq1xL3nw+ajrMi7uvPU2sDg1tC808jrtMt4bWyhozwvcD4KPHA+sb7A/dHdyr7I/dbWs6PTw3ByZWZlcmVuY2WjrMjnz8K0+sLro7o8L3A+CjxwPnByZWZlcmVuYy54bWw8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">
每一個Preference中的都會包含一個key(android:key),它的功能相當於普通layout中的id。
title:這一項的標題,字體比較大。
summary:摘要,標題下面的文字,字體較小。
defaultValue:為設置summary之前的默認值。
其中數組list_preference在array.xml中定義:
Setting中是怎樣加入這些UI信息呢?- Red
- Blue
- Green
public class Setting extends PreferenceActivity implements OnSharedPreferenceChangeListener { private EditTextPreference mEtPreference; private ListPreference mListPreference; private CheckBoxPreference mCheckPreference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); initPreferences(); } private void initPreferences() { mEtPreference = (EditTextPreference)findPreference(Consts.EDIT_KEY); mListPreference = (ListPreference)findPreference(Consts.LIST_KEY); mCheckPreference = (CheckBoxPreference)findPreference(Consts.CHECKOUT_KEY); }
我們需要注冊一個Preference變化的Listener來監聽這些事件。當我們做好設置後,Preference已經替我們做好了數據持久化了。
我們可以用sharedPreference來獲得這些值。
下面來看:
@Override protected void onResume() { super.onResume(); // Setup the initial values SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); mListPreference.setSummary(sharedPreferences.getString(Consts.LIST_KEY, "")); mEtPreference.setSummary(sharedPreferences.getString(Consts.EDIT_KEY, "linc")); // Set up a listener whenever a key changes sharedPreferences.registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(Consts.EDIT_KEY)) { mEtPreference.setSummary( sharedPreferences.getString(key, "20")); } else if(key.equals(Consts.LIST_KEY)) { mListPreference.setSummary(sharedPreferences.getString(key, "")); } } }到此,setting的功能就實現了。那麼,在其他Activity中如何獲得設置的值呢?也是用sharedPreference來實現:
看看我的MainActivity:
package com.linc.howtopreferenceactivity; import android.os.Bundle; import android.preference.PreferenceManager; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private Button btnSetting,btnShow; private TextView tvCheckout,tvList,tvEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnSetting = (Button)findViewById(R.id.btn_setting); btnShow = (Button)findViewById(R.id.btn_show); btnSetting.setOnClickListener(buttonListener); btnShow.setOnClickListener(buttonListener); tvCheckout = (TextView)findViewById(R.id.tv_checkout); tvList = (TextView)findViewById(R.id.tv_list); tvEditText = (TextView)findViewById(R.id.tv_edittext); } private OnClickListener buttonListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()) { case R.id.btn_setting: startActivity(new Intent(MainActivity.this,Setting.class)); break; case R.id.btn_show: showSettingInfo(); break; } } }; private void showSettingInfo() { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); tvCheckout.setText(settings.getBoolean(Consts.CHECKOUT_KEY, false)+""); tvEditText.setText(settings.getString(Consts.EDIT_KEY, "")); tvList.setText(settings.getString(Consts.LIST_KEY, "linc")); } @Override public 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; } }
一般在android顯示一個View都是通過Activity的setContentView設置的,但是還有一種方法,可以直接使用WindowManager在整個應用的最上
內存洩漏和內存溢出是安卓開發中經常碰到的問題,如何能夠快速有效的發現並追蹤內存洩漏或者內存溢出的源頭,是每個開發者都需要掌握的技巧,今天我給大家帶來常見的內存分析工具使用
每家公司的app都有自己的統一的特色,這就涉及到theme和style,當然他們只不是僅僅為了這個特點存在,想activity的進入動畫等都能通過theme和style實
Eclipse/ADTADT是Google在Eclipse基礎上封裝了Android開發工具的環境,最新版本是2014年7月2日發布的adt-bundle-windows