Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android ApiDemos示例解析(35):App->Preferences->Advanced preferences

Android ApiDemos示例解析(35):App->Preferences->Advanced preferences

編輯: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);
 }
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved