一般来说,我们的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使用的更多相关文章

  1. Android开发——设置界面的创建

    前言: 最近忙着搞项目,难得有时间,便来整理搞项目中学习到的知识 使用之前,先介绍一下android这种的五种数据储存方式,分别为文件储存,SharePrefence,SQL,使用ContentPro ...

  2. Android 打开设置界面或者WiFi连接界面

    1.使用APP打开系统的设置界面或者WiFi连接界面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网 ...

  3. Android偏好设置(7)自定义Preference,和PreferenceDialog

    Building a Custom Preference The Android framework includes a variety of Preference subclasses that ...

  4. react-native 跳转到ios/android 权限设置界面

    目录 ios android 1.在android/app/src/main/java/com/<projectname>文件夹下创建opensettings文件夹 2.在opensett ...

  5. 这才是Android设置界面的正确做法👌👌👌

    话不多说,先上效果图 本文参考简书博客:<这才是Android设置界面的正确做法>一文写成,在其基础上删改并增加了一些内容.建议新窗口打开原文,在本文讲述不清楚的地方参考原文去寻找答案. ...

  6. Android调用系统自带的设置界面

    Android有很多系统自带的设置界面,如设置声音,设置网络等. 在开发中可以调用这些系统自带的设置界面. 点击以下列表中的选项,就可以调出相应的系统自带的设置界面. 如点击“无线和网络设置”,可以调 ...

  7. Xamarin Android设置界面提示类型错误

    Xamarin Android设置界面提示类型错误 错误信息:Integer types not allow (at ‘padding’ with value ’10’)Android界面属性的长度和 ...

  8. android判断当前网络状态及跳转到设置界面

    今天,想做这个跳转到网络设置界面, 刚开始用 intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS); 不料老是出现settings.Wirele ...

  9. Android常用控件之Fragment仿Android4.0设置界面

    Fragment是Android3.0新增的概念,是碎片的意思,它和Activity很相像,用来在一个Activity中描述一些行为或部分用户界面:使用多个Fragment可以在一个单独的Activi ...

随机推荐

  1. 前端之CSS续集

    CSS:语法形式上由选择器+以及一条或多条声明组成:选择器查找到指定的html标签后,使用css属性设置html标签的样式: 一.css 语法形式: 二.使用步骤   1.引入css规则 2.使用cs ...

  2. LeetCode OJ:Evaluate Reverse Polish Notation(逆波兰表示法的计算器)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  3. 交叉编译工具链介绍《Building Embedded Linux Systems》

    1.前言 配置和编译一个合适的GNU工具链是相对复杂的并且需要很精细的操作,包括你需要对不同软件库之间的依赖关系.它们的各自的任务,不同软件库版本情况都有比较好的了解,编译工具链是一个乏味的工作. 2 ...

  4. Flask 的路由系统 FBV 与 CBV

    Flask的路由系统 本质: 带参数的装饰器 传递函数后 执行 add_url_rule 方法 将 函数 和 url 封装到一个 Rule对象 将Rule对象 添加到 app.url_map(Map对 ...

  5. pip国内镜像(清华大学镜像)

    网上搜到的pip国内镜像大部分是豆瓣的 http://pypi.douban.com/simple/ 但是根本不全,很多包没有 所以推荐清华大学的 https://pypi.tuna.tsinghua ...

  6. js mouseover/out 要用mouseenter/leave 代替

    js中 onmouseover/out 在进入离开绑定事件的子元素时,都会触发一次,因此项目中药尽量少用 可以使用onmouseenter/leave代替,它们在绑定事件上只会触发一次,不会重复触发

  7. I.MX6 AR8031 寄存器操作

    /*************************************************************************** * I.MX6 AR8031 寄存器操作 * ...

  8. linux 权限之所有者所属组

    linux 如何改变文件属性与权限 我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改一个档案的属性与权限呢? 我们这里介绍几个常用于群组.拥有者.各种身 ...

  9. 【WCF安全】WCF 自定义授权[用户名+密码+x509证书]

    1.x509证书制作(略) 2.直接贴代码 ----------------------------------------------------------------------服务端----- ...

  10. Des加解密(Java端和Js端配套)解析

    一.什么是DES加密        des对称加密,对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码( ...