博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PreferenceActivity的使用
阅读量:7221 次
发布时间:2019-06-29

本文共 3320 字,大约阅读时间需要 11 分钟。

PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置,这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Preference则不需要自己控制Preference的读写,PreferenceActivity会为我们处理一切。

PreferenceActivity与普通的Activity不同,它不是使用界面布局文件,而是使用选项设置的布局文件。

选项设置布局文件以PreferenceScreen作为根元素来表示定义一个参数设置界面布局。

从3.0以后Android不再推荐直接让PreferenceActivity加载选项设置布局文件,而是建议将PreferenceActivity与PreferenceFragment结合使用。

先新建一个工程:

Activity继承自PreferenceActivity

package com.example.testpreferenceactivity;import android.os.Bundle;import android.preference.PreferenceActivity;public class MainActivity extends PreferenceActivity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		//setContentView(R.layout.activity_main);		addPreferencesFromResource(R.xml.preference);	}}

在res目录下新建立一个xml目录,在该目录中建立preference.xml

可以将上面的preference.xml中代码修改如下,就可实现嵌套设置菜单

将上面xml文件中间那两个PreferenceScreen改为PreferenceCategory就可以看到PreferenceCategory的显示效果了

Android系统提供的还有以对话框显示的DialogPreference,可以输入文本的EditTextPreference,以列表方式显示供选择的ListPreference和设置铃声用的RingtonePreference。

详细请看:

在上面我们提到Android不再推荐直接让PreferenceActivity加载选项设置布局文件,下面我们来看看PreferenceActivity与PreferenceFragment结合使用。

PreferenceActivity加载的选项设置列表布局文件如下:

上面代码中Prefs1Fragment、Prefs2Fragment是两个内部类

在PreferenceActivity中重写onBuidHeaders方法来加载上面的页面布局

public void onBuildHeaders(List
target) { // 加载选项设置列表的布局文件 loadHeadersFromResource(R.xml.preference_headers, target); }
PreferenceActivity内部还有两个内部类,代码如下:

/** * */package org.crazyit.app;import java.util.List;import android.os.Bundle;import android.preference.PreferenceActivity;import android.preference.PreferenceFragment;import android.widget.Button;import android.widget.Toast;public class PreferenceActivityTest extends PreferenceActivity{	@Override	protected void onCreate(Bundle savedInstanceState)	{		super.onCreate(savedInstanceState);		// 该方法用于为该界面设置一个标题按钮		if (hasHeaders())		{			Button button = new Button(this);			button.setText("设置操作");			// 将该按钮添加到该界面上			setListFooter(button);		}	}	// 重写该该方法,负责加载页面布局文件	@Override	public void onBuildHeaders(List
target) { // 加载选项设置列表的布局文件 loadHeadersFromResource(R.xml.preference_headers, target); } public static class Prefs1Fragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } public static class Prefs2Fragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.display_prefs); // 获取传入该Fragment的参数 String website = getArguments().getString("website"); Toast.makeText(getActivity() , "网站域名是:" + website , Toast.LENGTH_LONG).show(); } } }
在两个Fragment中我们使用addPreferencesFromResource方法来加载设置的布局文件

preference.xml

display_prefs.xml

运行结果:

源代码下载:

转载于:https://www.cnblogs.com/lanzhi/p/6469227.html

你可能感兴趣的文章
9 Web开发——springmvc自动配置原理
查看>>
截取图片
查看>>
Python学习--01入门
查看>>
MySQL联合查询语法内联、左联、右联、全联
查看>>
看牛顿法的改进与验证局部收敛
查看>>
第十篇、自定义UIBarButtonItem和UIButton block回调
查看>>
复分析学习1
查看>>
Java虚拟机笔记(四):垃圾收集器
查看>>
计算机运行命令全集
查看>>
WebSocket 实战
查看>>
二次排序
查看>>
CSS:如何清除a标签之间的默认留白间距
查看>>
selenium随笔
查看>>
leetcode599
查看>>
String类中“==”和“equals()”的区别
查看>>
leetcode--883
查看>>
the application could not be verified
查看>>
[转]Centos配置国内yum源
查看>>
redis数据类型和应用场景
查看>>
Spring IOC
查看>>