首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 11473|回復(fù): 0
上一主題 下一主題
[教程]

Android軟件開發(fā)之PreferenceActivity中的組件(二十八)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
Android軟件開發(fā)之PreferenceActivity中的組件   
   
   
     
1.PreferenceActivity 介紹     
   
    PreferenceActivity 繼承ListActivity 它是以一個(gè)列表的形式在展現(xiàn)內(nèi)容,它最主要的特點(diǎn)是添加Preference可以讓控件的狀態(tài)持久化儲(chǔ)存,舉個(gè)例子 比如用戶選中checkbox后 退出應(yīng)用然后在進(jìn)入應(yīng)用,這時(shí)用戶希望看到的是checkbox被選中,所以軟件須要記錄用戶每次操作的過程并且持久儲(chǔ)存,在進(jìn)入應(yīng)用的時(shí)候須要判斷這些久儲(chǔ)存的數(shù)據(jù)然后將系統(tǒng)控件的狀態(tài)呈現(xiàn)在UI中。   
      尤其是軟件開發(fā)肯定會(huì)有一堆設(shè)置選項(xiàng)選項(xiàng),每次進(jìn)入Activity都去手動(dòng)的去取儲(chǔ)存的數(shù)據(jù),這樣代碼會(huì)變得很復(fù)雜很麻煩。 這個(gè)時(shí)候Preference就出來了,它就是專門解決這些特殊的選項(xiàng)保存與讀取的顯示。用戶每次操作事件它會(huì)及時(shí)的以鍵值對(duì)的形式記錄在SharedPreferences中,Activity每次啟動(dòng)它會(huì)自動(dòng)幫我們完成數(shù)據(jù)的讀取以及UI的顯示。   
      Android開發(fā)中一共為我們提供了4個(gè)組件,分別是CheckBoxPreference組件、EditTextPreference組件、ListPreference組件、RingtonePreference組件,下面我用一個(gè)例子一一向同學(xué)們介紹一下。   
   
   
   
2.CheckBoxPreference組件   
   
CheckBoxPreference 選中為true 取消選中為false 它的值會(huì)以boolean的形式儲(chǔ)存在SharedPreferences中。   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <PreferenceScreen   
      xmlns:android="http://schemas.android.com/apk/res/android">   
              <PreferenceCategory android:title="CheckBoxPreference">           
              <CheckBoxPreference android:key="checkbox_0"   
                  android:title="CheckBox_A"   
                    android:summary="這是一個(gè)勾選框A" >   
            </CheckBoxPreference>   
               
              <CheckBoxPreference android:key="checkbox_1"   
                  android:title="CheckBox_B"   
                    android:summary="這是一個(gè)勾選框B" >   
            </CheckBoxPreference>   
            </PreferenceCategory>   
    </PreferenceScreen>   
復(fù)制代碼
     
  1. import android.content.Context;   
    import android.os.Bundle;   
    import android.preference.CheckBoxPreference;   
    import android.preference.Preference;   
    import android.preference.PreferenceActivity;   
    import android.preference.Preference.OnPreferenceChangeListener;   
    import android.preference.Preference.OnPreferenceClickListener;   
    import android.widget.Toast;   
       
    public class CheckBoxActivity extends PreferenceActivity {   
       
        Context mContext = null;   
        @Override   
        protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
            // 從資源文件中添Preferences ,選擇的值將會(huì)自動(dòng)保存到SharePreferences   
            addPreferencesFromResource(R.xml.checkbox);   
          
            mContext = this;   
               
            //CheckBoxPreference組件   
            CheckBoxPreference mCheckbox0 = (CheckBoxPreference) findPreference("checkbox_0");   
            mCheckbox0.setOnPreferenceClickListener(new OnPreferenceClickListener() {   
                   
                @Override   
                public boolean onPreferenceClick(Preference preference) {   
                    //這里可以監(jiān)聽到這個(gè)CheckBox 的點(diǎn)擊事件   
                    return true;   
                }   
            });   
               
            mCheckbox0.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {   
                   
                @Override   
                public boolean onPreferenceChange(Preference arg0, Object newValue) {   
                    //這里可以監(jiān)聽到checkBox中值是否改變了   
                    //并且可以拿到新改變的值   
                      Toast.makeText(mContext, "checkBox_0改變的值為" +  (Boolean)newValue, Toast.LENGTH_LONG).show();     
                    return true;   
                }   
            });   
       
            CheckBoxPreference mCheckbox1 = (CheckBoxPreference) findPreference("checkbox_1");   
            mCheckbox1.setOnPreferenceClickListener(new OnPreferenceClickListener() {   
                   
                @Override   
                public boolean onPreferenceClick(Preference preference) {   
                    //這里可以監(jiān)聽到這個(gè)CheckBox 的點(diǎn)擊事件   
                    return true;   
                }   
            });   
               
            mCheckbox1.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {   
                   
                @Override   
                public boolean onPreferenceChange(Preference arg0, Object newValue) {   
                    //這里可以監(jiān)聽到checkBox中值是否改變了   
                    //并且可以拿到新改變的值   
                      Toast.makeText(mContext, "checkBox_1改變的值為" +  (Boolean)newValue, Toast.LENGTH_LONG).show();     
                    return true;   
                }   
            });   
          
        }   
       
    }   
復(fù)制代碼
3.EditTextPreference組件   
   
EditTextPreference 點(diǎn)擊后會(huì)彈出一個(gè)輸入框,輸入的內(nèi)容會(huì)以字符串的的形式儲(chǔ)存在SharedPreferences中。   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <PreferenceScreen   
      xmlns:android="http://schemas.android.com/apk/res/android">   
             <PreferenceCategory android:title="EditTextPreference">           
             <EditTextPreference android:key="edit_0"   
                    android:title="輸入信息_A"   
                    android:summary="請(qǐng)輸入您的信息"   
                    android:defaultValue="請(qǐng)輸入信息"   
                    android:dialogTitle="輸入框">   
            </EditTextPreference>   
                        
             <EditTextPreference android:key="edit_1"   
                    android:title="輸入信息_B"   
                    android:summary="請(qǐng)輸入您的信息"   
                    android:defaultValue="請(qǐng)輸入信息"   
                    android:dialogTitle="輸入框">   
            </EditTextPreference>   
            </PreferenceCategory>   
    </PreferenceScreen>
復(fù)制代碼
     
     
  1. import android.content.Context;   
    import android.os.Bundle;   
    import android.preference.EditTextPreference;   
    import android.preference.PreferenceActivity;   
       
    public class EditTextActivity extends PreferenceActivity {   
       
        Context mContext = null;   
       
        @Override   
        protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
            // 從資源文件中添Preferences ,選擇的值將會(huì)自動(dòng)保存到SharePreferences   
            addPreferencesFromResource(R.xml.edittext);   
       
            mContext = this;   
       
            // EditTextPreference組件   
            EditTextPreference mEditText = (EditTextPreference) findPreference("edit_0");   
               
            //設(shè)置dialog按鈕信息   
            mEditText.setPositiveButtonText("確定");   
            mEditText.setNegativeButtonText("取消");   
               
            //設(shè)置按鈕圖標(biāo)   
            mEditText.setDialogIcon(R.drawable.jay);   
        }   
       
         
    }
復(fù)制代碼
4.ListPreference組件   
   
在res/array中先寫兩個(gè)數(shù)組,一個(gè)用與list的顯示內(nèi)容,一個(gè)用戶list的選中數(shù)值。   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <resources>   
       
    <string-array name="auto_logout_time_key">   
                    <item>10 mins.</item>   
                    <item>20 mins.</item>   
                    <item>30 mins.</item>   
                    <item>60 mins.</item>   
    </string-array>   
       
    <string-array name="auto_logout_time_value">   
                    <item>600000</item>   
                    <item>1200000</item>   
                    <item>1800000</item>   
                    <item>3600000</item>   
    </string-array>   
    </resources>
復(fù)制代碼
ListPreference點(diǎn)擊后會(huì)彈出一個(gè)列表框,選中后會(huì)將選中的內(nèi)容(上面數(shù)組中的值)會(huì)以字符串的的形式儲(chǔ)存在SharedPreferences中。   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <PreferenceScreen   
      xmlns:android="http://schemas.android.com/apk/res/android">   
      <PreferenceCategory android:title="ListPreference">           
                     <ListPreference   
                             android:key="list_0"   
                         android:title="登錄設(shè)置A"   
                         android:dialogTitle="選擇在線時(shí)間"   
                         android:entries="@array/auto_logout_time_key"   
                            android:entryValues="@array/auto_logout_time_value" >   
                    </ListPreference>   
               
                     <ListPreference   
                             android:key="list_0"   
                         android:title="登錄設(shè)置A"   
                         android:dialogTitle="選擇在線時(shí)間"   
                         android:entries="@array/auto_logout_time_key"   
                            android:entryValues="@array/auto_logout_time_value" >   
                    </ListPreference>   
            </PreferenceCategory>   
    </PreferenceScreen>
復(fù)制代碼
     
  1. import android.os.Bundle;   
    import android.preference.PreferenceActivity;   
       
    public class ListActivity extends PreferenceActivity {   
        @Override   
        protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
            // 從資源文件中添Preferences ,選擇的值將會(huì)自動(dòng)保存到SharePreferences   
            addPreferencesFromResource(R.xml.list);   
        }   
    }   
復(fù)制代碼
5.RingtonePreference組件   
   
RingtonePreference點(diǎn)擊后會(huì)彈出一個(gè)系統(tǒng)鈴聲的列表框,選中后會(huì)將選中的內(nèi)容(uri字符集)會(huì)以字符串的的形式儲(chǔ)存在SharedPreferences中。   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <PreferenceScreen   
      xmlns:android="http://schemas.android.com/apk/res/android">   
    <PreferenceCategory android:title="RingtonePreference">           
              <RingtonePreference     
                        android:key="ringtone_0"     
                        android:summary="選擇系統(tǒng)鈴聲A"     
                        android:title="鈴聲設(shè)置"     
                        android:ringtoneType="all"     
                        android:showSilent="true" ></RingtonePreference>   
          
        <RingtonePreference     
                android:key="ringtone_!"     
                android:summary="選擇系統(tǒng)鈴聲B"     
                android:title="鈴聲設(shè)置"     
                android:ringtoneType="all"     
                android:showSilent="true" ></RingtonePreference>   
          
        </PreferenceCategory>   
    </PreferenceScreen>
復(fù)制代碼
android:ringtoneType 系統(tǒng)一共提供了4中響鈴模式的類型分別為  鈴聲(ringtone)  通知( notification) 警告(alarm) 全部(all)   
   
模擬器默認(rèn)是沒有鈴聲的,下圖中的鈴聲我是將歌曲文件拷貝到SD卡中,設(shè)置鈴聲后才會(huì)出現(xiàn)的。如果覺得拷貝麻煩可以使用豌豆莢或者91助手將歌曲文件放入手機(jī)SD卡中,在鈴聲設(shè)置那里設(shè)置一下在這里就會(huì)出現(xiàn)。   
   
     
  1. import android.os.Bundle;   
    import android.preference.PreferenceActivity;   
       
    public class RingtoneActivity extends PreferenceActivity {   
        @Override   
        protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
            // 從資源文件中添Preferences ,選擇的值將會(huì)自動(dòng)保存到SharePreferences   
            addPreferencesFromResource(R.xml.ringtone);   
        }   
    }   
復(fù)制代碼
5.自定義控件   
   
使用系統(tǒng)的控件在顯示方面難免會(huì)有些單一,如果想做一個(gè)好看的界面就需要使用自定義Preference。下面我簡(jiǎn)單說明一下如何編寫自定義Preference。首先在res/layout中添加preferences文件   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <LinearLayout         xmlns:android="http://schemas.android.com/apk/res/android"   
            android:layout_width="fill_parent"   
            android:layout_height="fill_parent"   
            android:background="#00000000">   
            <LinearLayout   
                    android:gravity="center_vertical"   
                    android:background="@drawable/preference_mid_background"   
       
                    android:layout_width="fill_parent"   
                    android:layout_height="wrap_content"   
                    >   
                    <ImageView   
                            android:focusable="false"   
                            android:layout_width="wrap_content"   
                            android:layout_height="wrap_content" android:src="@drawable/setting_about_us">   
                    </ImageView>   
                    <RelativeLayout   
                            android:layout_width="wrap_content"   
                            android:layout_height="wrap_content"   
                            android:layout_marginLeft="15dip"   
                            android:layout_marginTop="6dip"   
                            android:layout_marginRight="6dip"   
                            android:layout_marginBOTTom="6dip"   
                            android:layout_weight="1"   
                            >   
                            <TextView   
                                    android:textSize="15dip"   
                                    android:textColor="#000000"   
                                    android:ellipsize="marquee"   
                                    android:id="@+android:id/title"   
                                    android:fadingEdge="horizontal"   
                                    android:layout_width="wrap_content"   
                                    android:layout_height="wrap_content"   
                                    android:singleLine="true"   
                                    >   
                            </TextView>   
                            <TextView   
                                    android:textAppearance="?android:attr/textAppearanceSmall"   
                                    android:textColor="#565656"   
                                    android:id="@+android:id/summary"   
                                    android:layout_width="wrap_content"   
                                    android:layout_height="wrap_content"   
                                    android:maxLines="4"   
                                    android:layout_below="@+android:id/title"   
                                    android:layout_alignLeft="@+android:id/title"   
                                    >   
                            </TextView>   
                    </RelativeLayout>   
                            <ImageView   
                                    android:focusable="false"   
                                    android:layout_width="wrap_content"   
                                    android:layout_height="wrap_content"   
                                    android:background="@drawable/preference_arrows"/>   
            </LinearLayout>   
    </LinearLayout>
復(fù)制代碼
android:background="@drawable/preference_mid_background"   
通過這一行可以設(shè)置這個(gè)按鈕的點(diǎn)擊、選中默認(rèn)的顯示狀態(tài),這樣可以讓你的按鈕更加好看。須要在res/drawable中添加xml文件   
   
android:state_facused :為控件選中顯示   
android:state_pressed:為控件按下顯示   
最后一個(gè)為默認(rèn)顯示   
  1. <?xml version="1.0" encoding="utf-8"?>   
    <selector   
            xmlns:android="http://schemas.android.com/apk/res/android">   
            <item   
                    android:state_focused="true"   
                    android:drawable="@drawable/preference_mid_pressed"   
                    >   
            </item>   
            <item   
                    android:state_pressed="true"   
                    android:drawable="@drawable/preference_mid_pressed"   
                    >   
            </item>   
            <item   
       
                    android:drawable="@drawable/preference_mid"   
                    >   
            </item>   
       
    </selector>
復(fù)制代碼
     
  1. import android.content.Context;   
    import android.os.Bundle;   
    import android.preference.Preference;   
    import android.preference.PreferenceActivity;   
    import android.preference.Preference.OnPreferenceClickListener;   
    import android.widget.Toast;   
       
    public class AllActivity extends PreferenceActivity {   
          
        /**自定義布局A**/   
        Preference preference0 = null;   
          
        /**自定義布局B**/   
        Preference preference1 = null;   
          
        Context mContext = null;   
        @Override   
        protected void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
            // 從資源文件中添Preferences ,選擇的值將會(huì)自動(dòng)保存到SharePreferences   
            addPreferencesFromResource(R.xml.all);   
            mContext = this;   
               
            preference0 = findPreference("pref_key_0");   
               
            preference0.setOnPreferenceClickListener(new OnPreferenceClickListener() {   
                   
                @Override   
                public boolean onPreferenceClick(Preference preference) {   
                      Toast.makeText(mContext, "自定義布局A被按下", Toast.LENGTH_LONG).show();     
                    return false;   
                }   
            });   
            preference1 = findPreference("pref_key_1");   
               
            preference1.setOnPreferenceClickListener(new OnPreferenceClickListener() {   
                   
                @Override   
                public boolean onPreferenceClick(Preference preference) {   
                      Toast.makeText(mContext, "自定義布局B被按下", Toast.LENGTH_LONG).show();     
                    return false;   
                }   
            });   
        }   
    }
復(fù)制代碼
讀取數(shù)據(jù)   
   
在PreferenceActivity中可以用下面這種方式拿到SharedPreferences中儲(chǔ)存的數(shù)值,通過PreferenceManager.getDefaultSharedPreferences(this) 方法拿到控件默認(rèn)儲(chǔ)存的sharedPreferences對(duì)象。   
  1. SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;   
        boolean something = prefs.getBoolean("something",false);
復(fù)制代碼
在模擬起中將SharedPreferences儲(chǔ)存內(nèi)容拷貝出來后,可以清楚的看到通過點(diǎn)擊系統(tǒng)控件儲(chǔ)存的數(shù)值。這里我說一下鈴聲的儲(chǔ)存,它是以一個(gè)字符串形式的uri字符集,它所指向的是系統(tǒng)鈴聲儲(chǔ)存的路徑。所以根據(jù)這個(gè)字符集就可以找到這個(gè)鈴聲。   
  1. <?xml version=1.0 encoding=utf-8 standalone=yes ?>   
    <map>   
    <string name="ringtone_!">content://media/external/audio/media/1</string>   
    <string name="ringtone_0">content://media/external/audio/media/1</string>   
    <string name="list_0">1800000</string>   
    <string name="edit_1">請(qǐng)輸入信息1212</string>   
    <string name="list">1200000</string>   
    <string name="ringtone">content://settings/system/ringtone</string>   
    <boolean name="checkbox_0" value="true" />   
    <boolean name="checkbox_1" value="true" />   
    <string name="edit_0">請(qǐng)輸入信息</string>   
    </map>   
復(fù)制代碼
第二十八講 Preference.rar(307.78 KB, 下載次數(shù): 273)[/I]2011-9-3 01:12 上傳點(diǎn)擊文件名   下載積分: 下載豆 -2

上一篇:android條形碼掃描(留著自己學(xué)習(xí))
下一篇:Android中Surface和SurfaceView的一些理解和總結(jié)

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2025-2-8 09:17 , Processed in 0.073180 second(s), 16 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2025 ZNDS.Com

快速回復(fù) 返回頂部 返回列表