Android的设置界面及Preference使用
一般来说,我们的APP都会有自己的设置页面,那么其实我们有非常简单的制作方法。老样子,先看效果图。

然后就是看源代码了。
第一步,先在res文件夹中新建一个xml文件夹,用来存放preferences.xml文件

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="显示一排偏好">
<CheckBoxPreference
android:key="checkbox_preference"
android:summary="这是一个开关按钮"
android:title="开关偏好" />
</PreferenceCategory>
<PreferenceCategory android:title="基于对话框的偏好">
<EditTextPreference
android:dialogTitle="输入你的宠物"
android:key="edittext_preference"
android:summary="使用一个文本框对话框"
android:title="文本输入偏好" />
<ListPreference
android:dialogTitle="选择一个"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entryvalues_list_preference"
android:key="list_preference"
android:summary="使用一个列表对话框"
android:title="列表偏好" />
</PreferenceCategory>
<PreferenceCategory android:title="启动偏好">
<PreferenceScreen
android:key="screen_preference"
android:summary="显示另一个偏好屏幕"
android:title="屏幕"> <CheckBoxPreference
android:key="next_screen_checkbox_preference"
android:summary="另一个屏幕上的偏好"
android:title="开关偏好" />
</PreferenceScreen> <PreferenceScreen
android:summary="通过意图启动一个Activity"
android:title="意图偏好">
<intent
android:action="android.intent.action.VIEW"
android:data="http://www.baidu.com" />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="偏好属性">
<CheckBoxPreference
android:key="parent_checkbox_preference"
android:summary="这是一个父开关"
android:title="父开关" />
<CheckBoxPreference
android:dependency="parent_checkbox_preference"
android:key="child_checkbox_preference"
android:layout="?android:attr/preferenceLayoutChild"
android:summary="这是一个子开关"
android:title="子开关" />
</PreferenceCategory>
</PreferenceScreen>
第二步,在string.xml文件中添加项数组
<resources>
<string name="app_name">My Application</string>
<string-array name="entries_list_preference">
<item>IT</item>
<item>Commerce</item>
<item>HR</item>
</string-array>
<string-array name="entryvalues_list_preference">
<item>001</item>
<item>002</item>
<item>003</item>
</string-array>
</resources>
第三步,让Activity继承PreferenceActivity(其实这种方式目前会提示过期,但是没关系),然后在重写onCreate方法,添加preferences.xml作为显示界面。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_setting);
addPreferencesFromResource(R.xml.preferences);
}
做到这一步,其实已经可以运行并看到效果了。但那么我们要如何拿到这些数据呢?那么修改下 代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
String text = sp.getString("edittext_preference", "");
String listtext = sp.getString("list_preference", "");
Log.i("lenve", ON_OFF+"--"+next_screen+"--"+text+"--"+listtext);
}
可是有的时候我们如果希望更改后立马被系统获知选项已被更改,又该如何?复写继承了PreferenceActivity的类中的onPreferenceTreeClick方法,这个方法会在设置修改时触发。
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
SharedPreferences sp = preference.getSharedPreferences();
boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
Log.i("lenve", ON_OFF+"");
String text = sp.getString("edittext_preference", "");
Log.i("lenve", text+"");
String listtext = sp.getString("list_preference", "");
Log.i("lenve", listtext+"");
boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
Log.i("lenve", next_screen+"");
return true;
}
好了,啰嗦到现在,我们直接看整个MainActivity的代码吧
package com.example.linfeng.myapplication; import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.util.Log; public class MainActivity extends PreferenceActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
String text = sp.getString("edittext_preference", "");
String listtext = sp.getString("list_preference", "");
Log.i("lenve", ON_OFF+"--"+next_screen+"--"+text+"--"+listtext);
} @Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
SharedPreferences sp = preference.getSharedPreferences();
boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
Log.i("lenve", ON_OFF+"");
String text = sp.getString("edittext_preference", "");
Log.i("lenve", text+"");
String listtext = sp.getString("list_preference", "");
Log.i("lenve", listtext+"");
boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
Log.i("lenve", next_screen+"");
return true;
}
}
就这么简单。OK啦
Android的设置界面及Preference使用的更多相关文章
- Android开发——设置界面的创建
前言: 最近忙着搞项目,难得有时间,便来整理搞项目中学习到的知识 使用之前,先介绍一下android这种的五种数据储存方式,分别为文件储存,SharePrefence,SQL,使用ContentPro ...
- Android 打开设置界面或者WiFi连接界面
1.使用APP打开系统的设置界面或者WiFi连接界面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网 ...
- Android偏好设置(7)自定义Preference,和PreferenceDialog
Building a Custom Preference The Android framework includes a variety of Preference subclasses that ...
- react-native 跳转到ios/android 权限设置界面
目录 ios android 1.在android/app/src/main/java/com/<projectname>文件夹下创建opensettings文件夹 2.在opensett ...
- 这才是Android设置界面的正确做法👌👌👌
话不多说,先上效果图 本文参考简书博客:<这才是Android设置界面的正确做法>一文写成,在其基础上删改并增加了一些内容.建议新窗口打开原文,在本文讲述不清楚的地方参考原文去寻找答案. ...
- Android调用系统自带的设置界面
Android有很多系统自带的设置界面,如设置声音,设置网络等. 在开发中可以调用这些系统自带的设置界面. 点击以下列表中的选项,就可以调出相应的系统自带的设置界面. 如点击“无线和网络设置”,可以调 ...
- Xamarin Android设置界面提示类型错误
Xamarin Android设置界面提示类型错误 错误信息:Integer types not allow (at ‘padding’ with value ’10’)Android界面属性的长度和 ...
- android判断当前网络状态及跳转到设置界面
今天,想做这个跳转到网络设置界面, 刚开始用 intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 不料老是出现settings.Wirele ...
- Android常用控件之Fragment仿Android4.0设置界面
Fragment是Android3.0新增的概念,是碎片的意思,它和Activity很相像,用来在一个Activity中描述一些行为或部分用户界面:使用多个Fragment可以在一个单独的Activi ...
随机推荐
- python基础之多线程与多进程(一)
并发编程? 1.为什么要有操作系统? 操作系统,位于底层硬件与应用软件之间 工作方式:向下管理硬件,向上提供接口 2.多道技术? 不断切换程序. 操作系统进程切换: 1.出现IO操作 2.固定时间 进 ...
- 前端 velocity(.vm)模板里写ajax出现解析异常
异常信息:Caused by: org.apache.velocity.exception.ParseErrorException: Encountered "{" at dist ...
- 2017.11.03 正确查找datasheet+ 英语邮件+英语会议
1寻找合适的元器件和替代料 你需要十分了解元器件的性能参数,如下图所示,所有的主要参数都在列表显示. 2如何在datasheet网找适合的元器件? a如果知道P/N,直接输入. b不知道p/n ,你就 ...
- 【python】ConfigParser写入和读取配置文件
参照博客 http://www.cnblogs.com/TankXiao/p/3038350.html 配置文件格式: [section1] name = tank age = 28 [section ...
- Linux 下新增用户的流程
一: 新增用户 1.添加新的用户账号使用useradd命令,其语法如下: 代码:useradd 选项 用户名其中各选项含义如下: 代码:-c comment 指定一段注释性描述.-d 目录 指定用户主 ...
- 【学习】JennyHui学英语 - 生词积累
(主要是来自于普特英语) 平常积累 20140820 20140826 VOA慢速英语生词积累 2014-10-08 2014-10-11 2014-10-13 2014-10-14 2014-10- ...
- CodeForces - 963D:Frequency of String (bitset暴力搞)
You are given a string ss. You should answer nn queries. The ii-th query consists of integer kiki an ...
- Arcgis Desktop连接GIS Servers报错“Proxy server got bad address from remote server ...”
今天打开Arcgis Desktop时突然发现连接GIS Servers报错“Proxy server got bad address from remote server ...” 网上查找到解决方 ...
- ACM学习历程—HDU5700 区间交(树状数组 && 前缀和 && 排序)
http://acm.hdu.edu.cn/showproblem.php?pid=5700 这是这次百度之星初赛2B的第五题.省赛回来看了一下,有这样一个思路:对于所有的区间排序,按左值排序. 然后 ...
- jquery 如何使用innerHTML
$("#responsediv") 是个Jquery对象,它Val()是对Value属性赋值对它无意义,Jquery没有innerHTML这个属性,应该这样写$("#re ...