一、在写之前我们制作APP应用的时候,需要用户配置一些信息。 这就是通常所说的APP应用程序的设置。

在Android系统中,由于系统本身的设置,用户体验和习惯深入人心,我们的APP应用程序也使用同样的设置页面

用户会更亲切更方便。 是吗? 我该怎么办呢? 这是根据本论文的主人公PreferenceActivity得出的。

二、详细设置打开安卓手机设置,如下图所示。

可以看到,整个页面分为几个组:无线网络、设备、个人、帐户和系统。 这个分组或分类就是首选项类别。

Wifi的右侧有一个开关。 此项目为checkbox首选项; 还有列表首选项和编辑首选项。

对于您的每个设置,都将保存在首选项中。 这就是setting的数据持久化。

三、如何实现自己的设置接下来要实现一个设置程序,看看你有多少首选项活动的基本知识。

首先,首选项活动是从API第1级加入的。 那么,Android3.0和更高版本有Fragment概念,同时也带来了首选项Fragment。 这是以后的事了,今天说个简单的吧。

此示例由两个活动组成。 第一个是MainAcitivity,程序启动后直接来这里,将Setting的各个设置内容用于现实。 第二个是Setting,它继承自PreferenceActivity,演示如何进行设置、数据存储操作等。 我只是想演示一下关于首选项活动的知识。 UI直接委托。 layout也使用了硬件代码。 官取其精华(如果有),只需去其糟粕。

1 .设置

首先介绍方法的首选项活动。 并不像常规活动一样,使用layout创建自己的接口。 使用自己的xml/preference.xml构建自己的接口,并将该xml添加到类中。

此示例显示三种常见的首选项,如以下代码所示:

preferenc.xml

? XML版本=’ 1.0 ‘编码=’ utf-8 ‘? preferencescreenxmlns 3360 Android=’ http://schemas.Android.com/apk/RES/Android ‘ preferencecategoryandroid 3360 title=’ first category ‘ listpreferenceandroid 3360 key=’ list _ key ‘ Android 3360 e ‘ 60摘要=’ list _ summary ‘ Android 3360 entries=’ @ array/list _ pree est list _ preference ‘ Android 3360 dialog title=preferencecategorypreferencecategoryandroid : title=’ second category ‘ edittextpreferenceandroid 3360 key=’ edittext _ kkext ry=’ edit summary ‘ Android : title=’ edit title ‘/checkboxpreferenceandroid : key=’ checkbox _ key ‘ Android : default value=’ checkbox default value ‘ Android 3360 sum marule edittextpreferenceandroid : key=’ num _ key ‘ Android 3360 default value=’0’ Android 3360 SD

gt; </PreferenceCategory></PreferenceScreen>

我将这三项preference分成两组(PreferenceCategory),First Category和Second Category.

每一个Preference中的都会包含一个key(android:key),它的功能相当于普通layout中的id。
title:这一项的标题,字体比较大。

summary:摘要,标题下面的文字,字体较小。
defaultValue:为设置summary之前的默认值。

其中数组list_preference在array.xml中定义:

<?xml version=”1.0″ encoding=”utf-8″?><resources> <string-array name=”list_preference”> <item>Red</item> <item>Blue</item> <item>Green</item> </string-array></resources>

Setting中是怎样加入这些UI信息呢?

public class Setting extends PreferenceActivity implements OnSharedPreferenceChangeListener { private EditTextPreference mEtPreference; private ListPreference mListPreference; private CheckBoxPreference mCheckPreference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); initPreferences(); } private void initPreferences() { mEtPreference = (EditTextPreference)findPreference(Consts.EDIT_KEY); mListPreference = (ListPreference)findPreference(Consts.LIST_KEY); mCheckPreference = (CheckBoxPreference)findPreference(Consts.CHECKOUT_KEY); }

此时,这个setting类就可以运行起来了。其实就是这么简单。也许你会问,我们设置了自己的偏好值,程序中如何获得呢?

我们需要注册一个Preference变化的Listener来监听这些事件。当我们做好设置后,Preference已经替我们做好了数据持久化了。
我们可以用sharedPreference来获得这些值。
下面来看:

@Override protected void onResume() { super.onResume(); // Setup the initial values SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); mListPreference.setSummary(sharedPreferences.getString(Consts.LIST_KEY, “”)); mEtPreference.setSummary(sharedPreferences.getString(Consts.EDIT_KEY, “linc”)); // Set up a listener whenever a key changes sharedPreferences.registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } @Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(Consts.EDIT_KEY)) { mEtPreference.setSummary( sharedPreferences.getString(key, “20”)); } else if(key.equals(Consts.LIST_KEY)) { mListPreference.setSummary(sharedPreferences.getString(key, “”)); }}}

到此,setting的功能就实现了。那么,在其他Activity中如何获得设置的值呢?也是用sharedPreference来实现:

看看我的MainActivity:

package com.linc.howtopreferenceactivity;import android.os.Bundle;import android.preference.PreferenceManager;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {private Button btnSetting,btnShow;private TextView tvCheckout,tvList,tvEditText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {btnSetting = (Button)findViewById(R.id.btn_setting);btnShow = (Button)findViewById(R.id.btn_show);btnSetting.setOnClickListener(buttonListener);btnShow.setOnClickListener(buttonListener);tvCheckout = (TextView)findViewById(R.id.tv_checkout);tvList = (TextView)findViewById(R.id.tv_list);tvEditText = (TextView)findViewById(R.id.tv_edittext);}private OnClickListener buttonListener = new OnClickListener() {@Overridepublic void onClick(View v) {switch(v.getId()) {case R.id.btn_setting:startActivity(new Intent(MainActivity.this,Setting.class));break;case R.id.btn_show:showSettingInfo();break;}}};private void showSettingInfo() {SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);tvCheckout.setText(settings.getBoolean(Consts.CHECKOUT_KEY, false)+””);tvEditText.setText(settings.getString(Consts.EDIT_KEY, “”));tvList.setText(settings.getString(Consts.LIST_KEY, “linc”));}@Overridepublic 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;}}

当然,就像用edit text一样,我们可以限制输入的是文字还是数字或者是字母。就像上面代码:android:numeric=”integer”

完整代码在此:HowToPreferenceActivity