android设置中常用的PreferenceActivity用法介绍

原创 2012年03月28日 11:09:19
PreferenceActivity它包含了许多类似控件的东西来表示不同的设置需求如分类设置,选择框设置,下拉列表设置,编辑框设置,铃声设置,而且这些设置不需要我们自己来保存用户设置的数据,它自己会将数据保存在xml文件当中。下面是PreferenceActivity中各个组件的介绍。

1. PreferenceScreen:设置页面,可嵌套形成二级设置页面,用Title参数设置标题。


Preferencescreen中启动activity
例如wireless_setting.xml中有如下片段

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.seedshope.android">
    <PreferenceScreen
        android:key="wifi_settings"
        android:title="@string/wifi_settings"
        android:summary="@string/wifi_settings_summary" >
        <intent
            android:action="android.intent.action.MAIN"
            android:targetPackage="com.android.settings"
            android:targetClass="com.android.settings.wifi.WifiSettings" />
    </PreferenceScreen>
</PreferenceScreen>

其中com.android.settings是工程的包名,com.android.settings.wifi.WifiSettings是要启动的类。
一般情况下,这样就ok了,点击对应的Preference就能够启动对应的activity,然而仅仅这样有时这样,并不一定能够启动对应的activity,因为它与回调函数onPreferenceTreeClick有关,有时候我们会重写这个方法如:

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
       if ( (preference == mAirplaneModePreference) &&
                (Boolean.parseBoolean(
                    SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) ) {
            // In ECM mode launch ECM app dialog
           startActivityForResult(
                new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
                REQUEST_CODE_EXIT_ECM);
            return true;
        }
        else {
            // Let the intents be launched by the Preference manager
            return false;
       }
    }

其中WirelessSetting.java中有如上函数,当返回值为true时,你怎么点击Preference都不会跳转到activity的,只有等到它的返回值为false的时候,才可以正常跳转,因为点击某一个Preference的真正实现在Preference.java的performClick函数中如下:

void performClick(PreferenceScreen preferenceScreen) {
        
        if (!isEnabled()) {
            return;
        }
        
        onClick();
        
        if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) {
            return;
        }
        
        PreferenceManager preferenceManager = getPreferenceManager();
        if (preferenceManager != null) {
            PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager
                    .getOnPreferenceTreeClickListener();
            if (preferenceScreen != null && listener != null
                    && listener.onPreferenceTreeClick(preferenceScreen, this)) {
                return;
            }
        }
        
        if (mIntent != null) {
            Context context = getContext();
            context.startActivity(mIntent);
        }
    }

当点击某个Preference时的调用流程是AdapterView.performItemClick--》PreferenceScreen.onItemClick--》Preference.performClick--》PreferenceActivity.onPreferenceTreeClick,当onPreferenceTreeClick返回true的时候就直接return了,没有走下面启动activity的地方了,因此要使一个Preference能够正常跳转到另外一个activity有两个条件,一是xml里面是否设置正确,第二是调用该xml的java类是否在onPreferenceTreeClick这个函数需要返回false。


2. PreferenceCategory:某一类相关的设置,可用Title参数设置标题,相当于一个分界线的东西一样,它的上面和下面分别属于不同类型的设置。

3. CheckBoxPreference:是一个CheckBox设置,只有两种值,true或false,可用Title参数设置标题,用summaryOn和summaryOff参数来设置控件选中和未选中时的提示,可以用defaultValue设置缺省值。

4. ListPreference:下拉框选择控件,用Title参数设置标题,用Summary参数设置说明,点击后出现下拉框,用dialogTitle设置下拉框的标题,下拉框内显示的内容和具体的值需要在res/values/array.xml中设置两个array来表示,entries和entryValues分别表示显示的值和代码中获取的真正的值。例如array.xml设置如下:    

<?xml version ="1.0" encoding ="utf-8" ?>
<resources>
<string-array name ="entries_list_preference" >
    <item> test1</item>
    <item> test2</item>
    <item> test3</item>
</string-array>
<string-array name ="entriesvalue_list_preference" >
    <item> 1</item>
    <item> 2</item>
    <item> 3</item>
</string-array>
</resources>

5. EditTextPreference:输入框控件,点击后可输入字符串设置。用Title参数设置标题,Summary参数设置说明,dialogTitle参数设置输入框的标题。

6. RingtonePreference:铃声选择框,点击后可选择系统铃声。Title参数设置标题,Summary参数设置说明,dialogTitle参数设置铃声选择框的标题。

7. 以上是PreferenceActivity的xml描述,那么在程序中我们只需要新建一个继承自PreferenceActivity的 Activity,然后在主程序中调用就可以了。这个PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/data/your_package_name /shared_prefs/(your_package_name)_preferences.xml。自动生成的配置文件如下:

<?xml version ='1.0' encoding ='utf-8' standalone ='yes' ?>
<map>
<string name ="EditTextPreference" >12332312</string>
<string name ="ListPreference" >2</string>
<string name ="RingtonePreference" >content://media/internal/audio/media/10</string>
<boolean name ="CheckBox1" value ="true" />
<boolean name ="CheckBox2" value ="true" />
</map>

文件中的name属性对应xml文件中的key属性表示某一个设置项,值是唯一的,value以及string中间的值表示设置项的具体值。

以下为AdwLauncher的一些配置:

<PreferenceScreen
		android:key="screenPreferences"
		android:title="@string/pref_title_screen_preferences"
		android:summary="@string/pref_summary_screen_preferences">
		<CheckBoxPreference android:title="@string/pref_title_hide_statusbar"
			android:defaultValue="false"
			android:summary="@string/pref_summary_hide_statusbar"
			android:key="hideStatusbar" />
		<CheckBoxPreference android:title="@string/pref_title_wallpaper_scrolling"
			android:defaultValue="@bool/config_wallpaper_scroll"
			android:summary="@string/pref_summary_wallpaper_scrolling"
			android:key="wallpaper_scrolling" />
		<PreferenceCategory
			android:title="@string/pref_title_screens_layout_preferencecategory">
			<CheckBoxPreference android:key="uiHideLabels"
				android:title="@string/pref_title_hide_icon_labels"
				android:summary="@string/pref_summary_hide_icon_labels"
				android:defaultValue="false" />
			<CheckBoxPreference android:title="@string/pref_title_autosize_icons"
				android:defaultValue="false"
				android:summary="@string/pref_summary_autosize_icons"
				android:key="autosizeIcons" />
			<com.android.launcher.DialogSeekBarPreference
				android:title="@string/pref_title_desktop_columns"
				android:summary="@string/pref_summary_desktop_columns"
				android:dialogMessage="@string/pref_dialog_desktop_columns"
				android:key="desktopColumns" android:defaultValue="@integer/config_desktopColumns"
				android:max="5" />
			<com.android.launcher.DialogSeekBarPreference
				android:title="@string/pref_title_desktop_rows"
				android:summary="@string/pref_summary_desktop_rows"
				android:dialogMessage="@string/pref_dialog_desktop_rows"
				android:key="desktopRows" android:defaultValue="@integer/config_desktopRows"
				android:max="5" />
		</PreferenceCategory>
		<PreferenceCategory
            android:title="@string/pref_title_screens_behaviour_preferencecategory">
			<com.android.launcher.DialogSeekBarPreference
				android:title="@string/pref_title_desktop_scrolling_speed"
				android:summary="@string/pref_summary_desktop_scrolling_speed"
				android:dialogMessage="@string/pref_dialog_desktop_scrolling_speed"
				android:key="desktopSpeed" android:defaultValue="@integer/config_desktopSpeed"
				android:max="2000" />
			<com.android.launcher.DialogSeekBarPreference
				android:title="@string/pref_title_desktop_overshoot"
				android:summary="@string/pref_summary_desktop_overshoot"
				android:dialogMessage="@string/pref_dialog_desktop_overshoot"
				android:key="desktopBounce" android:defaultValue="@integer/config_desktopBounce"
				android:max="100" />
		</PreferenceCategory>
	</PreferenceScreen>


android设置页面之PreferenceActivity及Preference

离上篇博客刚好一周,希望后面会记录更多的内容,也算自己的Android笔记吧。     本篇主要记录一般的android设置页面PreferenceActivity的使用以及与之剪不断,理还乱...
  • w7849516230
  • w7849516230
  • 2013年08月11日 16:46
  • 9199

android设置中常用的PreferenceActivity用法介绍

今天主要研究了一下设置界面中用得比较多的PreferenceActivity,它包含了许多类似控件的东西来表示不同的设置需求如分类设置,选择框设置,下拉列表设置,编辑框设置,铃声设置,而且这些设置不需...
  • wuqilianga
  • wuqilianga
  • 2016年05月27日 15:45
  • 858

Android之设置页面(PreferenceActivity使用)

Android之设置页面(PreferenceActivity使用)
  • zq2114522
  • zq2114522
  • 2016年01月21日 21:41
  • 2762

PreferenceActivity 修改背景颜色

PreferenceScreen PreferenceXXXPreferenceXXX并不是在 他的xml 中修改的,当时傻的修改半天一直没效果在 界面的 style 中添加入如下属性设置 ...
  • kongbaidepao
  • kongbaidepao
  • 2017年06月17日 16:22
  • 463

Android实战技巧之六:PreferenceActivity使用详解

一、写作前面 当我们做应用的时候,需要用户配置一些信息,而这就是通常所说的应用设置。 对于Android系统来说,系统本身的设置带来的用户体验和习惯已经深入人心,在我们的应用中同样用到类似的设置页,...
  • lincyang
  • lincyang
  • 2014年03月06日 20:49
  • 40985

PreferenceActivity 偏好设置

PreferenceResource中各个组件的介绍。 Preference的布局在: res/xml/下新建preference.xml通常是用fragment来显示Preference,然后将f...
  • qq_37679744
  • qq_37679744
  • 2017年04月20日 08:59
  • 351

关于PreferenceActivity的使用和一些问题的解决(自定义Title和取值)

android的Setting往往用PreferenceActivity来写的 我们在建立layout文件:
  • baidu_nod
  • baidu_nod
  • 2014年07月09日 17:28
  • 2049

Android Settings 系统设置中 PreferenceActivity点击Header是如何处理的?

转载请注明出处:http://blog.csdn.net/droyon/article/details/18009373   本文讲述PreferenceActivity中单击事件的处理,...
  • ysh06201418
  • ysh06201418
  • 2014年06月05日 08:44
  • 6330

Android PreferenceActivity点击Header是如何处理的?

1、设置源代码中点击事件处理逻辑 2、通过Action调用Settings设置应用界面的流程。 3、设置源代码中Header的注意事项...
  • hailushijie
  • hailushijie
  • 2014年01月08日 22:32
  • 4806

PreferenceActivity定制

android很多设置界面都会使用PreferenceActivity来实现,但那个界面比较丑陋,显示开发总是满足不了要求。 可以自己实现一个,但是那样又会使Activity中的逻辑代码和xml布局...
  • luck_apple
  • luck_apple
  • 2011年12月12日 16:36
  • 3896
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android设置中常用的PreferenceActivity用法介绍
举报原因:
原因补充:

(最多只允许输入30个字)