使用PrefereceFragment实现设置页面

使用PrefereceFragment实现设置页面

PrefereceFragment简述

当我们在开发Android项目时一般都会用到首选项设置,在Android3.0之前我们都使用PreferenceActivity类来进行操作,这些设置习惯会被Preference自动保存下来,以便下次进入后恢复上一次的选择状态。

PreferenceActivity和普通的Activity不同,他们不使用setContentView加载布局,而是加载选项设置布局,而选择设置布局是以PreferenceScreen作为根元素的xml布局文件。

但在Android3.0之后Google不推荐我们使用PreferenceActivity来进行首选项设置,而是替换成了PreferenceFragment,其实二者的用法类似,只不过PreferenceFragment更容易扩展,所以推荐使用PreferenceFragment进行首选项设置。

PreferenceFragment是直接继承自Fragment,另选项布局xml文件的根节点一定是,在这个元素中我们可以添加不同的Preference,常用的Preference控件如下:

PreferenceView控件含义
PreferenceTextView文本框
CheckBoxPreferenceCheckBox单选框
EditTextPreferenceEditText输入文本框
ListPreferenceListView列表框

所要用到的组合控件

控件说明
PreferenceCategory用于组合一组Preference,使布局更具备层次感
PreferenceScreen所有Preference元素的根节点。

通用的属性

android:key:每个Preference控件独一无二的”ID”,唯一表示此Preference。          

android:defaultValue:默认值。例如,CheckPreference的默认值可为”true”,默认为选中状态;

android:enabled : 表示该Preference是否可用状态。     

android:title :每个Preference在PreferenceScreen布局上显示的标题——大标题

android:summary :每个Preference在PreferenceScreen布局上显示的标题——小标题(可以没有)

android:persistent:表示Preference元素所对应的值是否写入sharedPreferen文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值。

android:dependency:表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用,则A可用;B不可用,则A不可用。

android:disableDependentsState:与android:dependency相反。B可用,则A不可用;B不可用,则A可用。

具体使用实例

1.PreferenceFragment的布局文件

<!--此文件为设置加载的布局文件-->
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="In-line preferences">
    <CheckBoxPreference
        android:key="checkbox_preference"
        android:summary="This a checkbox"
        android:title="Checkbox_preference"/>
    </PreferenceCategory>
    <PreferenceCategory android:title="Dialog-based preferences">
        <EditTextPreference
            android:dialogTitle="Enter your favorite animal"
            android:title="EditTextPreference"
            android:key="edittext_preference"
            android:summary="An example that uses an edit text dialog"/>
        <ListPreference
            android:entries="@array/options"
            android:entryValues="@array/options"
            android:dialogTitle="Choose one"
            android:summary="An example that use a list dialog"
            android:title="List prefernce"
            android:key="list_preference"/>
        <!--需要补充列表项的数据来源-->
    </PreferenceCategory>
    <PreferenceCategory android:title="Launch preferences">
        <PreferenceScreen
            android:key="screen_preference"
            android:summary="Shows another screen of preferences"
            android:title="Screen preference">
            <CheckBoxPreference
                android:key="next_scrren_checkbox_preference"
                android:summary="Preference that is on the next screen but same hierarchy"
                android:title="Toggle preference"/>
        </PreferenceScreen>
        <PreferenceScreen
            android:summary="Launches an Activity from an intent"
            android:title="Intent preference"/>
            <intent
                android:action="android.intent.action.VIEW"
                android:data="http://www.google.com"/>
    </PreferenceCategory>
    <!--设置项关联,选中父选项时,子选项才显示。使用dependency属性-->
    <PreferenceCategory android:title="Preference attributes">
        <CheckBoxPreference
            android:key="parent_checkbox_preference"
            android:summary="This is visually parent"
            android:title="Parent checkbox preference" />
        <!-- 子类的可见类型是由样式属性定义的 -->
        <CheckBoxPreference
            android:dependency="parent_checkbox_preference"
            android:key="child_checkbox_preference"
            android:summary="This is visually a child"
            android:title="Child checkbox preference" />
    </PreferenceCategory>
</PreferenceScreen>

需要注意的一些属性

2.创建PreferenceFragment,并将布局文件加载进去

package com.example.martinzou.android_exp_5;

import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.annotation.Nullable;

/**
 * Created by 10630 on 2018/5/25.
 */

public class PreFragment extends PreferenceFragment {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //从xml文件中加载选项
        addPreferencesFromResource(R.xml.preference);
    }

}

3.主活动设置

package com.example.martinzou.android_exp_5;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //加载Fragment
        FragmentManager fragmentManager=getFragmentManager();
        //开启一个新事务
        FragmentTransaction transaction=fragmentManager.beginTransaction();
        PreFragment preFragment=new PreFragment();
        transaction.add(R.id.layout1,preFragment);
        transaction.commit();
    }
}
### 4.0实现效果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值