zoukankan      html  css  js  c++  java
  • Preference 的xml使用 小结

       Preference译为 偏好 或者 首选项。作用 配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依然有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式 来处理这种情况,自动保存这些数据,并立时生效。Android提供一种类似layout的方式来进行Prefernce的布局

    例子 1:

    步骤1:编写preference XML,在res/xml/下加入我们的preference XML文件,例如名字叫testpreference.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!-- preference的组织方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是带层次组织关系,在后面的例子体验 -->
    <PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
       
    <!--RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 -->
        <CheckBoxPreference android:key="
    checkbox"
            android:title="
    CheckBox Preference"
            android:summary="
    Check it on , check it off"/>
        <RingtonePreference android:key="
    ringtone"
            android:title="
    Ringtone Preference"
            android:showDefault="
    true"
            android:showSilent="
    true"
            android:summary="
    Pick a tone, any tone"/>
    </PreferenceScreen>

    步骤2:在java源代码中调用该xml,生成相应的preference界面

    public class Chapter21Test1 extends PreferenceActivity{
      
     @Override
        protected void onCreate(Bundle savedInstanceState) {
           
    super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.testpreference);
        }
    }

    和用layout方式一样,代码很简单。和以往界面最大的区别是,我们对checkbox进行选择或者对ringtone进行选择后,这个选择结果是被保留的,当我们退出actitvity后再次进入,上次的选项依然保留。我们可以利用preference这一特性,而无须人工对数据进行保存和读取,很是方便。

    步骤3:获取preference的数据

    除了在preference的界面中可以保留数据,我们也希望能够读出数据,以便这些数据可以用在其他的activity中。如果另一个activity和这些数据关联,而且希望能够实时进行同步,例如:在onResume()中对preference保留的数据进行读取,而后进行相关的更新。

    想要 获取preference的数据首先要获取preferences,然后通过 键值对的获取方式根据key获取数值,在xml中checkbox的key为“checkbox”,值的类型为布尔值,而rintong的值为String,例如:

        protected void onResume() { //在另一个Activity中
           
    super.onResume();
            SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
            System.out.println(new Boolean(prefs.getBoolean("
    checkbox",false)).toString());//false表示没有查到checkbox这个key的返回值
            System.out.println(prefs.getString("
    ringtone","<unset>"));//<unset>表示没有查到ringtong这个key的返回值
        }

    获取preferences可以通过三种方式
    一、getPreferences():可以获取同一activity中的preference;
    二、getSharedPreferences():可以获取映用级别的preferences(),在这个例子中由于我们封装在同一app中,也可以使用SharePreferences prefs = getSharedPreferences( "com.wei.android.learning_preferences" ,0);其中第一个参数name的格式是<package_name>_preferences;
    三、getDefaultSharedPreferences():就是我们例子的方式,通过Android的偏好管理器来获取其所管理的preferences。

    Preferenece数据的操作

    在上面的例子中,preference的数值会被保留,而且可以在其他的activity中读取。如果需要清除数据,可以通过remove()清除某个名字的prefernece,clear()清除所有的preferences。我们可以通过edit()获取preferences的editor,进而进行编辑,修改后,通过commit()将修改值保存。

    Preferenece XML

    Preference的XML可以通过PreferenceCategory来进行组织。PreferenceCategory可以将几个 模块 组合在一起并加上标题。我们依然用前面的xml例子,通过PreferenceCategory来进行组织,如下:和之前的例子比较,将chekcbox和rintong组织成为一个category,并加上了"simple Preferences"的标题

    例子2:

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
           <PreferenceCategory android:title="Simple Preferences">
                <CheckBoxPreference android:key="checkbox" ..../>
                <RingtonePreference android:key="ringtone" ... />

           </PreferenceCategory>
    </PreferenceScreen>

    PreferenceCategory也可以嵌套PreferenceScreenPreferenceScreen中的内容,将通过另一屏来显示我们在上面例子后面添加一个嵌套了PreferenceScreen的PreferenceCategory。整个PreferenceScreen作为一个组件出现,点击后新的一屏,进入PreferenceScreen定义。通过这个关系,我们可以组织自己的preference架构。

    例子3:

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
           <PreferenceCategory android:title="Simple Preferences">
                <CheckBoxPreference android:key="checkbox" ..../>
                <RingtonePreference android:key="ringtone" ... />
           </PreferenceCategory>

           <PreferenceCategory android:title="Detail Screens">
               <PreferenceScreen android:title="Detail"
                   android:summary="Addtional preference help in another page">
                   <CheckBoxPreference
    android:key="checkbox2"
                       android:title="Another Checkbox"
                       android:summary="On or Off, It's a problem...."
    />
               </PreferenceScreen>
           </PreferenceCategory>
    </PreferenceScreen>

    在前面的例子中我们使用了CheckBox和Ringtong,在下面的例子,我们实验另外的两个组建EditText和List,这两种都是已弹框的方式。在上面的例子我们继续增加内容

    例子4:

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen ...>
           ......     

           <PreferenceCategory android:title="Other Preferences">
               <EditTextPreference android:key="text"
                   android:title="
    Text Entry Dialog"
                   android:summary="
    Click to pop up a field for entry"
                   android:dialogTitle="
    Enter something useful"/>
               <ListPreference android:key="list"
                   android:title="
    Selection Dialog"
                   android:summary="
    Click to pop yo a list for select"
                   android:entries="@array/cities"
                   android:entryValues="@array/airport_codes"

                   android:dialogTitle="
    Choose a City"/>
           </PreferenceCategory>
    </PreferenceScreen>

    在list中由两个引用@array/cities和@array/airport_codes,我们需要在资源文件中定义:两个 array。内容如下:
    <resources>
         <string-array name="cities">
            <item>Pittsburgh</item>
            <item>Allentown/Bethlehem</item>
            <item>Erie</item>
     
        </string-array>
        <string-array name="airport_codes">
            <item>PHL</item>
            <item>PIT</item>
            <item>ABE</item>
        
        </string-array>
    </resources>

    运行结果如右图所示。对于EditText,键值对保存的值是String,即用户在输入框中输入的内容。List的情况稍微复杂一些,在设置ListPreference的属性有一个entires,这是在List显示给用户看的内容,如果我们去获取preference的值,在这个例子为prefs.getString("list", "<unset>");,则返回在entryValues对应的数值,例如我们选择了第一个item:Pittsburgh,则获取的值为PHL。entries和entryValues是一一对应的。

  • 相关阅读:
    PHP flush()与ob_flush()的区别
    IE 浏览器各个版本 JavaScript 支持情况一览表
    Jquery元素选取、常用方法
    JS阻止事件冒泡
    Ajax传递路径问题及解决
    JS时间戳格式化日期时间
    UEditor编辑器的使用
    使用PHPMailer发送邮件
    服务器数据库编码格式问题
    三级联动
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744731.html
Copyright © 2011-2022 走看看