<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 一、寫作前面 當我們做應用的時候,需要用戶配置一些信息,而這就是通常所說的應用設置。 對于Android系統來說,系統本身的設置帶來的用戶體驗和習慣已經深入人心,在我們的應用中同樣用到類似的設置頁, 那么用戶使用起來就會更加親切和方便。是嗎?那我們應該怎么做到呢?這就要靠本文的主人公PreferenceActivity了。 ### 二、設置的細節 打開Android手機的設置,如下圖: ![](https://box.kancloud.cn/2016-01-01_5685d19658335.jpg) 我們會看到整個頁面被分為幾組:無線網絡、設備、個人、賬戶和系統。這個分組(或者叫分類)就是PreferenceCategory。 Wifi右邊有開關,這一項就是CheckBoxPreference;其他還有ListPreference和EditTextPreference。 你的每一次設置,都會被Preference存下來,這就是setting的數據持久化。 ### 三、如何實現自己的設置 下面我們來實現一個設置程序,看看PreferenceActivity的基本知識都有哪些。 首先要說的是,PreferenceActivity從API level1中就加入了,那么后續自Android3.0后有了Fragment的概念,同時也帶來了PreferenceFragment,這是后話,今天我們先講講簡單的。 這個例子有兩個Activity組成,第一個是MainAcitivity,程序啟動后直接到此,用來現實Setting中的各項設置內容;第二個是Setting,繼承自PreferenceActivity,展示如何設置和數據存儲操作等。我只是想演示PreferenceActivity相關的知識,UI是直接托的,layout中也用了Hardcode,請看官只是取其精華(如果有的話),去其糟粕。 1.Setting 先來說說重頭戲PreferenceActivity,它并不像普通的Activity那樣用layout來做自己的界面,它是用專屬的xml/preference.xml來構建自己的界面,然后在類中加入此xml。 本例演示三種常用preference,如下代碼: preferenc.xml ~~~ <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="First Category"> <ListPreference android:key="list_key" android:defaultValue="list key default value" android:title="list title" android:summary="list_summary" android:entries="@array/list_preference" android:entryValues="@array/list_preference" android:dialogTitle="list_dialog_title" /> </PreferenceCategory> <PreferenceCategory android:title="Second Category"> <EditTextPreference android:key="edittext_key" android:defaultValue="edit default value" android:summary="edit summary" android:title="edit title" /> <CheckBoxPreference android:key="checkbox_key" android:defaultValue="checkbox default value" android:summary="checkbox summary" android:title="checkbox title" /> <EditTextPreference android:key="num_key" android:defaultValue="0" android:summary="edit summary" android:numeric="integer" android:title="input number" /> </PreferenceCategory></PreferenceScreen> ~~~ 我將這三項preference分成兩組(PreferenceCategory),First Category和Second Category. 每一個Preference中的都會包含一個key(android:key),它的功能相當于普通layout中的id。 title:這一項的標題,字體比較大。 summary:摘要,標題下面的文字,字體較小。 defaultValue:為設置summary之前的默認值。 其中數組list_preference在array.xml中定義: ~~~ <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="list_preference"> <item>Red</item> <item>Blue</item> <item>Green</item> </string-array> </resources> ~~~ Setting中是怎樣加入這些UI信息呢? ~~~ 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);?? ????}?? ~~~ 此時,這個setting類就可以運行起來了。其實就是這么簡單。也許你會問,我們設置了自己的偏好值,程序中如何獲得呢? 我們需要注冊一個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;?? ????}?? ?? }?? ~~~ 當然,就像用edit text一樣,我們可以限制輸入的是文字還是數字或者是字母。就像上面代碼:android:numeric="integer" 完整代碼在此:[HowToPreferenceActivity](http://download.csdn.net/detail/lincyang/7002263)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看