編輯:Android開發教程
前篇文章Android ApiDemo示例解析(31):App->Preferences->Launching preferences 中用到了Advanced preferences 中定義的AdvancedPreferences。
本篇具體介紹AdvancedPreferences, 這個例子稱為Advanced ,是因為 它涉及到了自定義Preference, 並在一個工作線程中刷新某個Preference的值。
Preference 為顯示在 PreferenceActivity (一般以列表顯示)在某個偏好的基類。有點類似於顯示在Activity中的某個View。Preference 實際存取 的是對應在Shared Preferences中一項,而Preference定義的key也就是用來訪問Shared Preferences的key值。
和View 一樣可以自定義View,在Android中也可以自定義Preference,用來顯示管理應用自定義的程序偏好。本例 MyPreference 自定 義一個Preference 用來存儲用戶點擊該Preference的次數,類型為整數,初始值定義為100。它在advanced_preferences.xml 對應的定義如下:
<com.example.android.apis.app.MyPreference
android:key=”my_preference”
android:title=”@string/title_my_preference”
android:summary=”@string/summary_my_preference”
android:defaultValue=”100″ />
Preference 定義了很多屬性,比如Default Value, dependency, enabled, icon ,key 等等都有對應的方法來操作。並且提供了兩個Listener:PreferenceChangeListener, PreferenceClickListener ,允許應用程序響應Preference值變化事件,或是用戶點擊Preference事件。
這裡按照MyPreference 代碼順序說明一下 如何自定義一個Preference。
1. 派生於 Preference基類。
public class MyPreference extends Preference
2. 和自定義View類似可以為自定義Preference 自定義Layout。 MyPreference 使用 R.layout.preference_widget_mypreference ,定義很簡單只有一個TextView ,其id為mypreference_widget。 一般在 構造函數中使用setWidgetLayoutResource為Preference派生類設置Layout資源。
// This is the constructor called by the inflater public MyPreference(Context context, AttributeSet attrs) { super(context, attrs); setWidgetLayoutResource(R.layout.preference_widget_mypreference); }
3. 如有需要為自定義的Layout中的View 設置屬性,可以在onBindView(View view)中完成。下面代碼為TextView設 置值為mClickCounter。
@Override protected void onBindView(View view) { super.onBindView(view); // Set our custom views inside the layout final TextView myTextView = (TextView) view.findViewById(R.id.mypreference_widget); if (myTextView != null) { myTextView.setText(String.valueOf(mClickCounter)); } }
4. 如果為該自定義Preference 在XML定義了初值,比如 MyPreference的初值android:defaultValue=”100″,我 們想在代碼中使用這個初值來初始化變量mClickCounter 。mClickCounter 類型為整數,這個變量就是用來保存用戶的按鍵次數 的。
@Override protected Object onGetDefaultValue(TypedArray a, int index) { // This preference type's value type is Integer, so we read the default // value from the attributes as an Integer. return a.getInteger(index, 0); } @Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { if (restoreValue) { // Restore state mClickCounter = getPersistedInt(mClickCounter); } else { // Set state int value = (Integer) defaultValue; mClickCounter = value; persistInt(value); } }
有了前面對Android平台的介紹,基本上可以開始編寫Android應用了,這裡將以繪制二維圖形為例,對Android開發的一般方 法做過介紹,其中涉及到自定義Appli
編寫本文的背景隨著智能電話使用率的增長,越來越多的基於 Web 的應用程序開始提供從移動客 戶端訪問的能力,無論該客戶端是浏覽器還是原生應用程序。在這兩種情況下,這些客戶
Remote Service Controller 和使用Local Service的Android ApiDemo示例解析(40):App->Service-&g
到這裡基本介紹了Android開發的一些基本知識,在開發實際應用時最常用的幾個參考是:The Developer’s GuideAndroid Referen