您的位置:首页 > 移动开发 > Android开发

Android开发之PreferenceActivity .

2011-08-31 11:53 316 查看
今天我们来讲PreferenceActivity的使用。我们先来认识一下它,看看它长什么样?呵呵,截图如下:



看到没?这就是PreferenceActivity.看起来蛮眼熟的,在哪见过。呵呵,对,在我们得模拟器“设置”—>“无线和网络”中,就使用了这个。呵呵,下面来跟据一个项目实例,来讲述它的具体应用。

1、 创建Android项目,命名为PreferenceActivity。

2、 在values目录下新建一个array.xml文件,以备下面程序使用,该文件代码如下:

view plaincopy to clipboardprint?

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

view plaincopy to clipboardprint?

<?xml version="1.0" encoding="utf-8"?>  
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
    <PreferenceCategory android:title="我的位置">  
       <CheckBoxPreference  
          android:key="first"  
          android:title="飞行模式"  
          android:defaultValue="true"  
       />  
       <CheckBoxPreference  
          android:key="second"  
          android:title="Wi-Fi"  
          android:summaryOn="开启"  
          android:summaryOff="关闭"  
          android:defaultValue="true"  
       />  
       <Preference  
          android:key="third"  
          android:title="Wi-Fi设置"  
          android:summary="设置和管理无线接入点"  
       />  
       <ListPreference  
          android:key="ListPreference"  
          android:title="ListPreference"  
          android:summary="ListPreference测试"  
          android:dialogTitle="ListPreference"  
          android:entries="@array/entries"  
          android:entryValues="@array/entriesvalue"  
       />  
       <EditTextPreference    
        android:key="EditTextPreference"    
        android:title="EditTextPreference"    
        android:summary="点击输入"    
        android:dialogTitle="输入设置"    
       />    
       <RingtonePreference    
        android:key="RingtonePreference"    
        android:title="RingtonePreference"    
        android:summary="选择铃声"    
       />   
    </PreferenceCategory>  
</PreferenceScreen>  

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <PreferenceCategory android:title="我的位置">
       <CheckBoxPreference
          android:key="first"
          android:title="飞行模式"
          android:defaultValue="true"
       />
       <CheckBoxPreference
          android:key="second"
          android:title="Wi-Fi"
          android:summaryOn="开启"
          android:summaryOff="关闭"
          android:defaultValue="true"
       />
       <Preference
          android:key="third"
          android:title="Wi-Fi设置"
          android:summary="设置和管理无线接入点"
       />
       <ListPreference
          android:key="ListPreference"
          android:title="ListPreference"
          android:summary="ListPreference测试"
          android:dialogTitle="ListPreference"
          android:entries="@array/entries"
          android:entryValues="@array/entriesvalue"
       />
       <EditTextPreference  
        android:key="EditTextPreference"  
        android:title="EditTextPreference"  
        android:summary="点击输入"  
        android:dialogTitle="输入设置"  
       />  
       <RingtonePreference  
        android:key="RingtonePreference"  
        android:title="RingtonePreference"  
        android:summary="选择铃声"  
       /> 
    </PreferenceCategory>
</PreferenceScreen>

4、 以上做好后,我们就只要修改程序中的部分代码了。首先,我们得让它继承自PreferenceActivity的Activity,然后在主程序中调用addPreferencesFromResource(R.xml.preference);就可以了。具体代码如下:

view plaincopy to clipboardprint?

public class PreferenceActivityTest extends PreferenceActivity implements OnSharedPreferenceChangeListener{
SharedPreferences prefs;
ListPreference listPreference;//声明ListPreference
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
//我们可以通过各个preference的key来得到Preference的view,从而可以用它进行相关操作
listPreference=(ListPreference)findPreference("ListPreference");
String str=listPreference.getKey();
System.out.println(str);
/*PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现
* 设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/
* data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。
* 如果要获取该文件中的值,我们可以通过以下方式取得*/
prefs=PreferenceManager.getDefaultSharedPreferences(this);
String value=prefs.getString("ListPreference", "xyz");
Toast.makeText(this, value, Toast.LENGTH_LONG).show();
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
// TODO Auto-generated method stub
if(preference.getKey().equals("third")){
//这里可以操作,实现界面的跳转
Intent intent=new Intent();
intent.setClass(this, RunActivity.class);
startActivity(intent);
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
//当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// TODO Auto-generated method stub

}
}

public class PreferenceActivityTest extends PreferenceActivity implements OnSharedPreferenceChangeListener{
SharedPreferences prefs;
ListPreference listPreference;//声明ListPreference
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
//我们可以通过各个preference的key来得到Preference的view,从而可以用它进行相关操作
listPreference=(ListPreference)findPreference("ListPreference");
String str=listPreference.getKey();
System.out.println(str);
/*PreferenceActivity中的设置存储是完全自动的,你不需要再用代码去实现
* 设置的存储,PreferenceActivity创建后会自动创建一个配置文件/data/
* data/you_package_name/shared_prefs/you_package_name_you_xml_name.xml。
* 如果要获取该文件中的值,我们可以通过以下方式取得*/
prefs=PreferenceManager.getDefaultSharedPreferences(this);
String value=prefs.getString("ListPreference", "xyz");
Toast.makeText(this, value, Toast.LENGTH_LONG).show();
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
// TODO Auto-generated method stub
if(preference.getKey().equals("third")){
//这里可以操作,实现界面的跳转
Intent intent=new Intent();
intent.setClass(this, RunActivity.class);
startActivity(intent);
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
//当选择或是输入不同的值时,他们的值会自动保存到sharedpreferences中,当值发生改变的时候会触发
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// TODO Auto-generated method stub

}
}
5、 到此我们得项目框架就已经搭建好了,单击执行便会得到我们以上的效果。

但是我们得任务还没完,下面的讲解才是本节的重点。学习PreferenceActivity我们需要注意一下几点:

第一, preference下的View是有限的,只有下面几个:

CheckBoxPreference:CheckBox选择项,对应的值的ture或flase
EditTextPreference:输入编辑框,值为String类型,会弹出对话框供输入。
ListPreference: 列表选择,弹出对话框供选择。
Preference:只进行文本显示,需要与其他进行组合使用。
PreferenceCategory:用于分组。
RingtonePreference:系统玲声选择

第二,PreferenceActivity布局中的一些属性。

android:key 唯一标识符。它对应保存的XML保存的配置文件中的节点的 name属性。android:defaultValue 默认值,对应XML中的Value属性的值。

android:title:显示标题(大字体显示)。

android:summary:副标题(小字体显示)。

android:dialogTitle:弹出对话框的标题

android:entries:列表中显示的值。为一个数组,通读通过资源文件进行设置。

android:entryValues:列表中实际保存的值,与entries对应。

第三,当PreferenceActivity上的View有所更改时,系统会自动将对应的值更新到XML配置文件中,该文件可以在android 的 file explorer 中的 data/data/"yourPageName"/shared_prefs/"yourpageName"_prefenrences.xml中找到。“yourpageName”表示你项目所在的包。

第四,如何响应PreferenceActivity操作。

其实,我们只要重写PreferenceActivity的onPreferenceTreeClick的方法就可以了,通过参数preference来判断是对那一个元素进行的,并根据需要进行操作。

到此,内容已经基本上剖析完全了。呵呵!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: