zoukankan      html  css  js  c++  java
  • <Android 基础(三 十)> Fragment (3) ~ PreferenceFragment

    简介

    PreferenceFragment , 展示一系列的Preference条目并且当与用户有交互时,产生的值会自动保存到SharedPreferences中,通过PreferenceManager#getDefaultSharedPreferences(android.content.Context)可以查看对应的SharedPreferences的值。展示的Preferences的风格会随着系统而改变,通过XML文件可以快速的创建Preferences,官方推荐使用Fragment来实现这类功能。

    创建XML

    Tag 意义
    PreferenceScreen 必须作为根节点,代表整个Preferences屏幕
    PreferenceCategory 一组Preferences,便于分类
    SwitchPreference 两种状态的preference,开关
    ListPreference 列表显示Preference, android:entries设置的内容是我们在设置时看到的内容,而android:entryValues就是保存在preferences.xml中的值
    CheckBoxPreference 复选框Preference,勾选和不勾选
    RingtonePreference Ringtone选择Preference
    EditTextPreference 编辑类Preference
    MultiSelectListPreference 多选类Preference

    常用属性

    属性 用法
    android:title 标题
    android:defaultValue 默认值
    android:key SharedPreference中保存值时使用的Key值
    android:entries 列表或者多选框的显示内容
    android:entryValues 列表或者多选框保存过程中对应的值

    代码使用

    XML文件

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory android:title="无线和网络">
            <SwitchPreference
                android:defaultValue="false"
                android:title="WLAN"
                android:key="switch_preference_wlan" />
            <SwitchPreference
                android:defaultValue="false"
                android:title="蓝牙"
                android:key="switch_preference_bluetooth" />
            <ListPreference
                android:defaultValue="1"
                android:title="休眠"
                android:entries="@array/pref_sleep_interval"
                android:entryValues="@array/pref_sleep_interval"
                android:key="list_preference_sleep" />
        </PreferenceCategory>
        <PreferenceCategory android:title="设备"
            android:persistent="false"
            android:orderingFromXml="false">
            <CheckBoxPreference
                android:defaultValue="false"
                android:title="静音"
                android:key="check_box_preference_virate" />
            <RingtonePreference
                android:defaultValue=""
                android:title="铃声"
                android:key="ringtone_preference_ringtone" />
        </PreferenceCategory>
        <PreferenceCategory android:title="隐私和安全">
            <EditTextPreference
                android:defaultValue="Default value"
                android:selectAllOnFocus="true"
                android:singleLine="true"
                android:title="设备名称"
                android:key="edit_text_preference_devicename" />
            <MultiSelectListPreference
                android:title="辅助功能"
                android:defaultValue="@array/pref_assit_function"
                android:entries="@array/pref_assit_function"
                android:entryValues="@array/pref_assit_function"
                android:key="multi_select_list_preference_assit" />
        </PreferenceCategory>
    </PreferenceScreen>

    arrays.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="pref_sleep_interval">
            <item>30秒</item>
            <item>1分钟</item>
            <item>2分钟</item>
            <item>5分钟</item>
            <item>10分钟</item>
            <item>30分钟</item>
        </array>
    
        <array name="pref_assit_function">
            <item>灵犀一指</item>
            <item>指关节截屏</item>
            <item>通话录音</item>
            <item>白科技</item>
            <item>黑科技</item>
        </array>
    </resources>

    自定义PreferenceFragment
    PreferenceFragment是抽象类,需要自己实现

    public class BaseFragment extends PreferenceFragment {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs);
        }
    
        @Override
        public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
            Toast.makeText(getActivity(), preference.toString() + " is Clicked", Toast.LENGTH_LONG).show();
            return super.onPreferenceTreeClick(preferenceScreen, preference);
        }
    }

    Activity中使用

    BaseFragment baseFragment = new BaseFragment();
    FragmentManager fm = getFragmentManager();
    FragmentTransaction transaction = fm.beginTransaction();
    transaction.replace(xxxxxx,baseFragment);
    transaction.commit();

    结果

    这里写图片描述

    SharedPreference结果<中文乱码是系统问题>
    这里写图片描述

  • 相关阅读:
    ie 火狐兼容集锦
    ie css png
    jQuery插件——autoTextarea-文本框根据输入内容自适应高度
    比onload更快获取图片尺寸(转载)
    数据库性能问题排查
    项目管理_FindBugs的使用
    js动态获取子复选项并设计全选及提交
    SVN使用_获取某版本后改动的文件列表
    存储过程_把字符串转化为结果集
    Spring下如何配置bean
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467157.html
Copyright © 2011-2022 走看看