preference 用法之Settings

                 preference 用法之Settings

  我们的app有时常需要包含Settings,那我们该怎样允许app使用Settings呢?这里我们就需要用到Preference类。

下面我就举一个例子来让我们更好的理解。

 1.创建xml文件夹

使用Setting我们首先需要创建一个res/xml文件夹,并且在里面创建一个文件类型为Preference的xml文件。

          
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- opens a subscreen of settings -->
    <!-- 创建一个子目录 -->
    <PreferenceScreen
        android:key="button_voicemail_category_key"
        android:persistent="false"
        android:title="@string/voicemail" >
        <ListPreference
            android:defaultValue="上海"
            android:entries="@array/citys"
            android:entryValues="@array/citys"
            android:key="button_voicemail_provider_key"
            android:title="@string/voicemail_provider" />
        <!-- opens another nested subscreen -->
        <PreferenceScreen
            android:key="button_voicemail_setting_key"
            android:persistent="false"
            android:title="@string/voicemail_settings" >
        </PreferenceScreen>

        <RingtonePreference
            android:key="button_voicemail_ringtone_key"
            android:ringtoneType="notification"
            android:title="@string/voicemail_ringtone_title" />
    </PreferenceScreen>
    <!-- 创建一个目录分组 -->
    <PreferenceCategory
        android:key="pref_key_storage_settings"
        android:title="@string/pref_sms_storage_title" >
        <CheckBoxPreference
            android:defaultValue="false"
            android:key="pref_key_auto_delete"
            android:summary="@string/pref_summary_auto_delete"
            android:title="@string/pref_title_auto_delete" />

        <ListPreference
            android:defaultValue="上海"
            android:dependency="pref_key_auto_delete"
            android:dialogTitle="citys"
            android:entries="@array/citys"
            android:entryValues="@array/citys"
            android:key="pref_syncConnectionType"
            android:summary="choice the city which you live"
            android:title="choice city" />
        <!-- 创建一编辑框输入内容 -->
        <EditTextPreference
            android:dependency="pref_key_auto_delete"
            android:key="pref_key_sms_delete_limit"
            android:summary="@string/pref_summary_delete_limit"
            android:title="@string/pref_title_sms_delete" />

        <Preference
            android:dependency="pref_key_auto_delete"
            android:key="pref_key_mms_delete_limit"
            android:summary="@string/pref_summary_delete_limit"
            android:title="@string/pref_title_mms_delete" />
    </PreferenceCategory>

</PreferenceScreen>

2. 创建我们的Activity继承PreferenceActivity

这里是不需要布局的
<pre name="code" class="java">package com.example.preferencetest;

import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends PreferenceActivity implements
		OnPreferenceChangeListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//修改保存的文件名称
		getPreferenceManager().setSharedPreferencesName("Test");
		// 3.0版本以后就需要使用PreferenceFragment,这里用过时的也没关系
		addPreferencesFromResource(R.xml.mysetting);
	}

	@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;
	}

	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
		// TODO Auto-generated method stub
		return false;
	}
	//重写这个方法,对其xml的属性进行操作
@Override
@Deprecated
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
		Preference preference) {
	// TODO Auto-generated method stub
	//当checkbox被点击了才可以对以下属性进行修改
	if("pref_key_auto_delete".equals(preference.getKey())){
		Toast.makeText(getApplicationContext(), "被点击了", 1).show();
		//这里需要匹配xml的key
		CheckBoxPreference box=(CheckBoxPreference) findPreference("pref_key_auto_delete");
		EditTextPreference edit=(EditTextPreference) findPreference("pref_key_sms_delete_limit");
		//当box被点击的时候edit才可以被编辑
		edit.setEnabled(box.isChecked());
	}
	return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}


 最后将Strings.xml发一下 
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">PreferenceTest</string>
    <string name="action_settings">Settings</string>
    <string name="voicemail">voicemail</string>
    <string name="voicemail_provider">voicemail_provider</string>
    <string name="voicemail_settings">voicemail_settings</string>
    <string name="voicemail_ringtone_title">voicemail_ringtone_title</string>
    <string name="pref_sms_storage_title">pref_sms_storage_title</string>
    <string name="pref_summary_auto_delete">pref_summary_auto_delete</string>
    <string name="pref_title_auto_delete">pref_title_auto_delete</string>
    <string name="pref_summary_delete_limit">pref_summary_delete_limit</string>
    <string name="pref_title_sms_delete">pref_title_sms_delete</string>
    <string name="pref_title_mms_delete">pref_title_mms_delete</string>
   	<string-array name="citys">
   	    <item >北京</item>
   	     <item >上海</item>
   	      <item >天津</item>
   	       <item >延安</item>
   	</string-array>
</resources>
这里我说一下,具体的settings的其他功能在android的Settings文档里都有,如果看不懂的可以直接查api。
效果图:
首先看下主界面


点击listpreference的效果图

子目录效果图这里我就不上传了。
文件下载路径:http://download.csdn.net/detail/kluing/7881731
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Preference 是 Android 中的一种轻量级的持久化存储机制,可以用来存储应用程序的各种设置和配置信息。在使用 Preference 时,可以通过简单的键值对来存储和读取数据,同时这些数据在应用程序退出后仍然可以保持不变,即实现了数据的持久化存储。 Preference 可以通过 XML 文件来定义,通常包括 PreferenceScreen、PreferenceCategory、CheckBoxPreference、EditTextPreference、ListPreference 等几种类型。其中,PreferenceScreen 是一个根元素,用来包含所有的 PreferencePreferenceCategory 用来将 Preference 分组,CheckBoxPreference 表示复选框,EditTextPreference 表示文本输入框,ListPreference 表示下拉列表框等。 使用 Preference 的步骤通常如下: 1. 定义一个 XML 文件,用来描述 Preference 的结构和属性; 2. 在 Activity 中通过 PreferenceFragment 或 PreferenceActivity 加载该 XML 文件; 3. 在代码中通过 SharedPreferences 对象来获取和设置 Preference 中的键值对。 例如,以下是一个简单的 Preference XML 文件: ```xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Display settings"> <CheckBoxPreference android:key="show_images" android:title="Show images" android:summary="Whether to show images in the app" android:defaultValue="true" /> <ListPreference android:key="font_size" android:title="Font size" android:summary="Select the font size" android:entries="@array/font_sizes" android:entryValues="@array/font_sizes_values" android:defaultValue="16sp" /> </PreferenceCategory> <PreferenceCategory android:title="User settings"> <EditTextPreference android:key="username" android:title="Username" android:summary="Enter your username" android:dialogTitle="Enter your username" /> </PreferenceCategory> </PreferenceScreen> ``` 在 Activity 中加载该 XML 文件的方法如下: ```java public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); } } ``` 在代码中获取和设置 Preference 的方法如下: ```java SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); boolean showImages = preferences.getBoolean("show_images", true); String fontSize = preferences.getString("font_size", "16sp"); String username = preferences.getString("username", ""); ``` 其中,PreferenceManager.getDefaultSharedPreferences() 方法可以获取一个默认的 SharedPreferences 对象,通过该对象可以获取和设置 Preference 中的键值对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值