Android基础知识--Preference的使用

来源:互联网 发布:宝山行知幼稚园 编辑:程序博客网 时间:2024/04/29 21:52

     在Android系统源码中,绝大多数应用程序的UI布局都有可能采用了Preference的布局结构,如Setting模块。Preference布局结构和View的布局结构相似,Preference的优点在于布局界面的可控性和高效率以及可存储值的简洁性(每个PreferenPreferencece存储在相对应下的SharedPreference文件夹下)。

1) 对比Preference和View下得各个子控件的区别与联系如下表。

Preference控件家庭View控件家庭
    控件的含义PreferenceTextView文本框EditTextPreference
EditText
编辑框ListPreferenceListview列表框CheckPreference/SwitchPreference
CheckBox
单选框DialogPreferenceAlertDialog对话框RingtonePreference    __________
铃声

2) Preference中常见的组合控件:
         (1) PreferenceCategory :类似于LinearLayout、RelativeLayout,用于组合一组Preference,使布局更具备层次感 。
         (2)PreferenceScreen  : 所有Preference元素的根节点。
 3)显示Preference布局结构
       首先让Activity继承PreferenceActivity,在onCreate()方法中通 过addPreferencesFromResource(R.xml.custom_preference) (我们自定义的Preference 布局)。

 4) Preference元素的通用XML Attributes说明:

android:key每个Preference控件独一无二的”ID”,唯一表示此Preferenceandroid:title整个屏幕的标题android:summary选项的简单说明android:defaultValue
对应值不存在时的默认值,常用于checkpreference控件中android:enabled表示该Preference是否可用状态android:entries
弹出的对话框中,列表显示的文本内容,注意哦,这里指定的是一个数组android:entryValues与android:entries相对应的值android:persistent表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值android:dependency表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用, 则A可用;B不可用,则A不可用android:disableDependentsState与android:dependency相反。B可用,则A不可用;B不可用,则A可用     

5)常用的方法:
              getKey()                 setKey()
             getSummary()          setSummary()
             getText()                 setText()

         getXXX()代表取得xxx属性的值。

6)常用的Preference控件所包含的属性和方法说明

       1、EditPreference
            方法:
               getEditText():返回的是我们在该控件中输入的文本框值;
               getText() :返回的是我们之前sharedPreference文件保存的值;          
        2、ListPreference

          XML Attributes:

android:dialogTitle弹出控件对话框时显示的标题android:entries类型为array,控件欲显示的文本android:entryValues类型为array,与文本相对应的key-value键值对,value保存至sharedPreference文件说明entries和entryValue属性使用的数组为定义在资源文件arrays.xml的数组名

方法:CharSequence[]    getEntries(): 返回的是控件显示文本的一个”key”数组,对应于属性android:entries
CharSequence[]    getEntryValues():返回的一个”value”数组,对应于属性android: entryValues;
 CharSequence      getEntry(): 返回当前选择文本;
String  getValue() :返回当前选中文本选中的value 。与之对应的还有它们所对应的setXXX()方法。
    
      3、RingtonePreference

        XML Attributes:

android:ringtoneType响铃的铃声类型,主要有:ringtone(音乐)、notification(通知)、alarm(闹铃) /all(所有可用声 音类型);android:showDefault默认铃声,可以使用系统(布尔值---true,false)的或者自定义的铃声android:showSilent
指定铃声是否为静音。指定铃声包括系统默认铃声或者自定义的铃声      4、DialogPreference

     XML Attributes:    android:dialogIcon 对话框的图android:dialogLayout 用来承载对话框的布局文件android:dialogMessage 对话框的消息android:dialogTitle 对话框的标题android:negativeButtonText The negative button text for the dialog. android:positiveButtonText The positive button text for the dialog.    方法:getDialog()/getDialogIcon()/getDialogLayoutResource()/getDialogMessage()/getDialogTitle()/getNegativeButtonText()/getPositiveButtonText()等方法;

   。。。。。。

7)较为重要的几个知识点剖析:

       1 在PreferenceActivity方法中,一个比较重要的监听点击事件方法为:
    public booleanonPreferenceTreeClick (PreferenceScreen preferenceScreen, Preference preference)
              说 明 : 当Preference控件被点击时,触发该方法。
              参数说明: preference   点击的对象。
              返回值:   true  代表点击事件已成功捕捉,不需要执行默认的动作或者返回上层调用;false 代表执行默认的动作并且返回上层调用。
      2 Preference.OnPreferenceChangeListener     该监听器的一个重要方法如下:
        boolean onPreferenceChange(Preference preference,Object objValue)
             说明:  当Preference的元素值发送改变时,触发该事件。
             返回值: true  代表将新值写入sharedPreference文件中。
                         false 则不将新值写入sharedPreference文件
     3 Preference.OnPreferenceClickListener      该监听器的一个重要方法如下:
         public booleanonPreferenceClick(Preference preference)
             说明:当点击控件时触发发生,可以做相应操作。

8)实例操作:

     1  创建Preference布局文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory
            android:title="Settings">
            
        <CheckBoxPreference
                android:key="checkbox_preference"
                android:title="CheckBox大标题"
                android:summary="CheckBox小标题" />
            
    </PreferenceCategory>
                
    <PreferenceCategory
            android:title="PreferenceCategory_2">
        <EditTextPreference
                android:key="edittext_preference"
                android:title="EditText的大标题"
                android:summary="EditText的小标题"
                android:dialogTitle="这是对话框的大标题" />
                
     <!--    <ListPreference
                android:key="list_preference"
                android:title="ListPreference的大标题"
                android:summary="ListPreference的小标题"
                android:entries="@array/entries_list_preference"
                android:entryValues="@array/entryvalues_list_preference"
                android:dialogTitle="ListPreference对话框Title" /> -->
    </PreferenceCategory>
    <PreferenceCategory
            android:title="点击这个Category将启动新的Preference">
       
        <PreferenceScreen
                android:key="screen_preference"
                android:title="新的PreferenceScreen的Title"
                android:summary="PreferenceScreen的Summary">
            
            <CheckBoxPreference
                    android:key="next_screen_checkbox_preference"
                    android:title="新的CheckBoxPreference的Title"
                    android:summary="新的CheckBoxPreference的Summary" />
                
        </PreferenceScreen>
        <PreferenceScreen
                android:title="intent的Title"
                android:summary="启动Intent的Summary">
            <intent android:action="android.intent.action.VIEW"
                    android:data="http://www.android.com" />
        </PreferenceScreen>
    </PreferenceCategory>
    
    <PreferenceCategory
            android:title="PreferenceCategory属性">
    
        <CheckBoxPreference
                android:key="parent_checkbox_preference"
                android:title="CheckBoxPreference的Title"
                android:summary="Summary,下个Item依赖这个CheckBox的选择" />
        <!-- 在XML中定义CheckBoxPreference属性 -->
        <CheckBoxPreference
                android:key="child_checkbox_preference"
                android:dependency="parent_checkbox_preference"
                android:layout="?android:attr/preferenceLayoutChild"
                android:title="这个Item依赖上个Item的选择"
                android:summary="Summary,这个Item依赖上个Item的选择" />
            
    </PreferenceCategory>
</PreferenceScreen>

   2)创建一个Activity

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

  3)效果图:

                          

  
0 0