preference 用法之Settings

本文介绍如何使用Android的Preference类创建应用设置界面。通过创建XML文件定义设置项,并在Activity中加载这些设置项,实现包括子目录、依赖项等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                 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.youkuaiyun.com/detail/kluing/7881731
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值