一般来说,我们的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啦

最新文章

  1. 容易忘记的git命令
  2. C++小结
  3. meta头部标签意义作用!
  4. [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表
  5. 转】Maven学习总结(三)——使用Maven构建项目
  6. Eclipse开发JQuery环境设置(Spket)
  7. django学习笔记一
  8. uva 1534 - Taekwondo(dp+馋)
  9. Ionic在Android上部署app步骤
  10. redis五大类型用法
  11. WEB消息推送-原理篇
  12. 任务定义器——SocketProcessor
  13. shell进阶函数
  14. 算法提高 P0102
  15. 使用准现网的数据,使用本地的样式脚本,本地调试准现网页面(PC适用)
  16. java第一节感受
  17. 【358】GitHub 上面文件夹下载方法
  18. python-day33--互斥锁
  19. input-form-select-a-img-ul-dl标签
  20. 推荐一个静态页面生成工具-mkdocs

热门文章

  1. 【2018年全国多校算法寒假训练营练习比赛(第四场)-A】石油采集(匈牙利算法)
  2. 内存保护机制及绕过方案——从堆中绕过safeSEH
  3. Git_学习_11_Git rebase合并提交信息
  4. Java中的深拷贝(深复制)和浅拷贝(浅复制)
  5. 【tensorflow:Google】三、tensorflow入门
  6. 【SQL查询】按照多个字段进行排序_order by
  7. Android中从SD卡中读取歌曲
  8. Java8新特性Optional、接口中的默认方法与静态方法
  9. Keras GRU 文字识别
  10. libwebsockets 运行问题