用户选项和设置用户界面

许多应用程序都会提供一个单独的界面,允许用户更改应用程序的选项和设置。Android提供了一套现成的Activity和Fragment类,使得创建这类用户界面非常容易:preferenceActivity和preferenceFragment。

首先在XML资源目录下创建XML文件,并在开头使用PreferenceScreen语法。该XML的结构很简单,它指定了所有允许用户更改的偏好,以及它们是如何相互作用的。开发者可以提供用于输入文本字符串的简单文本字段,复选框以及选项列表。对于每个选项,可以指定标题和说明,还可以把偏好分成不同的类别。开发者不需要自己去保存修改的值,因为PreferenceFragment会保存用户的修改。PreferenceFragment使用的SharedPreferences实例和从PreferenceManaget.getDefaultSharedPreferences()获取的是同一个。

下面的PreferenceScreen.xml代码显示了两个用户可配置的选项。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/network_preferences_title">
        <CheckBoxPreference
                android:title="@string/network_wifi_only_title"
                android:summaryOn="@string/network_wifi_only_summary_on"
                android:summaryOff="@string/network_wifi_only_summary_off"
                android:key="network.wifiOnly"
                android:defaultValue="false"/>
        <ListPreference
                android:title="@string/animal_retry_count_title"
                android:summary="@string/animal_retry_count_summary"
                android:key="network.retryCount"
                android:defaultValue="3"
                android:entryValues="@array/animal_retry_count_option_values"
                android:entries="@array/animal_retry_count_options" />
    </PreferenceCategory>
</PreferenceScreen>

接下来要实现PreferenceActivity,并且添加preferenceFragment作为其UI,然后调用PreferenceFragment.addPreferencesFromResource()来指定用于显示设置用户界面的XML。Android框架会生成符合应用程序样式的主题的用户界面。

下面的代码指定了要使用的XML资源文件。本例还调用了PreferenceManager.setDefaultValues方法,这样偏好文件会使用XML文件指定的默认值。

public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_screen, false);
            addPreferencesFromResource(R.xml.preference_screen);
            getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this);
        }

    @Override
    public void onDestroy() {
        super.onDestroy();
        getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Log.i("MainActivity", "liyuanjinglyj");
        Log.i("MainActivity",key);
        boolean flag=false;
        if("network.wifiOnly".equals(key)){
            flag=sharedPreferences.getBoolean(key,false);
        }
        if(flag){
            Toast.makeText(getActivity(), "打开了WIFI", Toast.LENGTH_LONG).show();
        }
    }
}

上面代码不仅实现了上述功能而且实现了SharedPreferences.OnSharedPreferenceChangeListener接口,当偏好设置发生改变时,就可以根据改变的Key处理相应的事件,当然光实现这个接口是不能监听偏好设置的变化的,还要注册后方能监听。

getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this);

当然有注册就必须注销。

启动这类Activity最常用的方式是使用Intent,而且要指定ComponentName而不是使用action字符串。还要确保在清单文件中把android:exported标志设为false,使其只能在应用程序中启动该Activity。

                                

时间: 2024-08-07 09:07:30

用户选项和设置用户界面的相关文章

Mac OS平台的Premiere Pro怎样配置首选项设置(一)?

Premiere Pro CC 2018 Mac版是一款编辑画面质量比较好的软件,有较好的兼容性,且可以与adobe公司推出的其他软件相互协作!小编今天就此款软件的"首选项配置"问题,为大家详细讲解一下.了解如何针对几个方面(从外观到播放.音频以及更多)配置首选项设置,充分利用 Premiere Pro 的功能. 您可以自定义 Premiere Pro 的外观和行为,从确定过渡的默认长度到设置用户界面的亮度.其中大部分首选项一直有效,直至更改它们.但是,为暂存盘设置的首选项将随项目一起

第一次接触C语言,第一次尝试做的ATM机

#include <stdio.h>#include <string.h> #define LINE "=====================================\n" #define KEY "123456" #define accounts "123456789" int main(){ //设置变量 int num; //用户选项 int m=10000; //账号初始金额 char key[6];

一 管理生命活动周期

用户导航.退出和返回您的应用时,应用中的Activity 实例将在其生命周期中转换不同状态. 例如,当您的Activity初次开始时,它将出现在系统前台并接收用户焦点. 在这个过程中,Android 系统会对Activity调用一系列生命周期方法,通过这些方法,您可以设置用户界面和其他组件. 如果用户执行开始另一Activity或切换至另一应用的操作,当其进入后台(在其中Activity不再可见,但实例及其状态完整保留),系统会对您的Activity调用另外一系列生命周期方法. 在生命周期回调方

jQuery 1.9 Ajax代码带注释

/* -----------ajax模块开始 -----------*/ var // Document location ajaxLocParts, ajaxLocation, ajax_nonce = jQuery.now(), ajax_rquery = /\?/, rhash = /#.*$/, rts = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r characte

推荐10个免费的HTML编辑器

如果你想开发一个网站,你肯定想要一个很棒的HTML编辑器,一个好的编辑器可以让代码更加整齐格式化,前端显示也会更好,从而提升你的工作效率.下面就为开发者推荐10个免费的HTML编辑器,你可以尝试使用.更多代码编辑器,可以参考<为你推荐10款开发常用的代码编辑器><"我最喜欢的Linux平台代码编辑器”排行榜><10个免费的在线Markdown编辑器>,希望对你有帮助. 1. Phase 5 Phase 5是自从1998年就被人期待和熟知的HTML编辑器,它的亮

Windows程序设计笔记4:第10章:TCP/IP和网络通信

WinSock接口:Windows处理网络的API 套接字socket 流套接字:SOCKET_STREAM           可靠连接   TCP HTTP POP3 数据报套接字:SOCKET_DGRAM     不可靠连接 UDP 寻址方式: 1:sockaddr的第1个版本 struct sockaddr{ u_short  sa_family;       //地址家族 char      sa_data[14];   //数据 } 2.sockaddr的TCP/IP版本的 sock

浅谈Android Activity

Activity是Android中最重要,最常见,也是最基本的组件,下面来详细介绍下Activity. 介绍 一个Acitvity作为一个显示在屏幕上的用户交互界面,比如在电子邮件应用中比如:一个用来显示收件列表的Activity,一个用来写邮件的Activity,一个阅读邮件内容的Activity,等等.Activity用来提供用户体验,许多不同体验的Activity聚集在一起即可以形成一个Android应用程序的用户体验,每一Activity都是相互独立的.应用除了可以访问自己的Activi

Python安装时报缺少DLL的解决办法

准备开始学习Python,但是刚准备环境搭建时就遇到了下面的错误: 仔细的看了看,说是缺少DLL. 对于这个问题的解决办法: 方法一: 1. 在安装包上点右键以管理员身份运行2. C:\Users\用户名\AppData\Local\Temp 文件夹上右键->属性->安全,给everyone 完全控制权限: 方法二: 使用windows的msiexec 命令,让我们先简单看看用法:msiexec --help Windows (R) Installer. V 5.0.7601.18896 ms

Managing the Activity Lifecycle 管理活动的生命周期

Managing the Activity Lifecycle 管理活动的生命周期 Previous         Next         Get started Dependencies and prerequisites 依赖和先决条件 How to create an Android project (see Creating an Android Project) 如何创建一个Android项目(参见创建一个Android项目) You should also read 你也应该阅读