用户选项和设置用户界面

简介: 用户选项和设置用户界面

许多应用程序都会提供一个单独的界面,允许用户更改应用程序的选项和设置。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。


                                                   

相关文章
|
8天前
|
人工智能 运维 安全
|
6天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
640 22
|
7天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
13天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
1042 110
人工智能 数据可视化 数据挖掘
233 0