Android学习【9】PreferenceFragment偏好设置(一)

Perference是我们常说的偏好设置,它会自动保存用户数据,上次修改后下一次自动生效,不需要重新配置。用它来做app的设置界面或者保存用户的登陆状态等等会很方便。Android3.0以前我们使用PreferenceActivity基类去显示给用户一个选项设置的界面。在Android3.0或更高的版本上,可以使用PreferenceFragment类去实现这个功能。

首先创建SettingFragment类继承自PreferenceFragment。使用addPreferencesFromResource加载资源文件setting.xml

public class SettingFragment extends PreferenceFragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.setting);
    }
}
接下来就是重点咯,setting.xml文件,源文件如下:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 设置的类别 -->
    <PreferenceCategory android:title="常用">
        <CheckBoxPreference
            android:defaultValue="false"
            android:key="checkbox"
            android:summary="checkbox"
            android:title="选择框" />
        <EditTextPreference
            android:defaultValue="hello"
            android:dialogTitle="输入框:"
            android:key="edittext"
            android:summary="edittext"
            android:title="请输入..." />
        <!--defaultValue:默认文字-->
        <MultiSelectListPreference
            android:dialogTitle="请选择..."
            android:entries="@array/demo_options"
            android:entryValues="@array/demo_values"
            android:key="MultiSelectList"
            android:summary="多选"
            android:title="标题" />
        <!-- 多选要放在单选之前。。。要不然会报错,不知道为什么 -->
        <ListPreference
            android:defaultValue="0"
            android:dialogTitle="请选择..."
            android:entries="@array/demo_options"
            android:entryValues="@array/demo_values"
            android:key="list"
            android:summary="单选"
            android:title="标题" />
        <!-- 对应为entryValues的值,缺省1 -->
    </PreferenceCategory>
    <PreferenceCategory android:title="其他">
        <RingtonePreference
            android:key="ring_tone_pref"
            android:ringtoneType="alarm"
            android:showSilent="true"
            android:summary="设置提示音"
            android:title="设置提示音" />
        <SwitchPreference
            android:key="switch"
            android:summary="switch it"
            android:title="switchPreference" />
        <Preference android:title="Intent打开">
            <intent
                android:targetClass="com.android.preferencedemo.DemoActivity"
                android:targetPackage="com.android.preferencedemo"></intent>
            <!-- 点击时 自定义一个默认跳转Intent  action指定隐式Intent -->
            <!-- action指定隐式Intent ; targetPackage和targetClass指定显示Intent-->
        </Preference>
    </PreferenceCategory>
</PreferenceScreen>
由此结构可以看出,PreferenceScreen是所有Preference元素的根节点,PreferenceCategory用于管理一组 Preference元素而CheckBoxPreference,EditTextPreference,MultiSelectListPreference,ListPreference,RingtonePreference,SwitchPreference,Preference则为基础控件。

为了方便理解我用一张图来解释:



这样便可以清晰的看出各个组件是什么了~~~

CheckBoxPreference为勾选控件,具有false/true属性;EditTextPreference为编辑框用于保存文字;MultiSelectListPreference为多项选择框,ListPreference为单项选择,RingtonePreference为铃声选择;SwitchPreference为开关;Preference可以通过intent打开其他页面。

其中MultiSelectListPreference和ListPreference需要绑定源数据,我这里绑定了同一个数据android:entries="@array/demo_options"为数据信息(界面显示的)android:entryValues="@array/demo_values"为数据标识(后台处理的)。array.xml文件如下

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="demo_options">
        <item>Item0</item>
        <item>Item1</item>
        <item>Item2</item>
    </string-array>
    <string-array name="demo_values">
        <item>0</item>
        <item>1</item>
        <item>2</item>
    </string-array>
</resources>

RingtonePreference的ringtoneType可以设置为4种属性:ringtone(音乐)、notification(通知)、alarm(闹铃)、all(所有可用声 音类型)。

最后在MainActivity中添加我们的Fragment效果即可~~~

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        SettingFragment setFragment = new SettingFragment();
        transaction.add(R.id.content, setFragment);
        transaction.commit();
    }

}

MainActivity中程序如下:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        SettingFragment setFragment = new SettingFragment();
        transaction.add(R.id.content, setFragment);
        transaction.commit();
    }

}
源码戳这里





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值