Fragment初学5——使用Fragment的子类PreferenceFragment

在Android的应用中通常都有setting功能,能够设置一些全局的选项,例如字体颜色,个人喜好等等。这些东西都存在一个xml中,在android中对应的对象就是SharedPreferences。在android3.0之前,我们一般继承PreferenceActivity这个基类去实现相关的方法。在3.0之后的系统中当然选择使用PreferenceFragment了,原因是PreferenceFragment是一个更加平滑的结构,你可以将它依附在任何的activity上面,这也是谷歌强力推荐的。


常用Preference

CheckPreference —— CheckBox 单选框

EditTextPreference —— EditText 输入文本框

ListPreference —— ListView 列表框

RingtonePreference —— 选择铃声

XML定义常用的属性有:

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

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

EditTextPreference的默认值可为”110” 。

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

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

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

ListPreference中:

android:entries:类型为array,控件欲显示的文本

android:entryValues:类型为array,与文本相对应的key-value键值对,value保存至sharedPreference文件


说完了,就开始介绍如何使用吧,

1、在项目的res/xml中新建一个preferences.xml。用于定义菜单界面的设置选项

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="inline_preferences" >
        <CheckBoxPreference
            android:key="checkbox_preference"
            android:summary="这是一个复选框"
            android:title="复选框" />
    </PreferenceCategory>
    <PreferenceCategory android:title="dialog-based preferences" >
        <EditTextPreference
            android:dialogTitle="编辑文本对话框"
            android:key="edittext_preference"
            android:summary="这是一个编辑文本对话框"
            android:title="可编辑文本框" />

        <ListPreference
            android:dialogTitle="请选择一项"
            android:entries="@array/entries_list_preference"
            android:entryValues="@array/entryvalues_list_preference"
            android:key="list_preferenc"
            android:summary="这是一个列表对话框"
            android:title="列表对话框" />
    </PreferenceCategory>
    <PreferenceCategory android:title="Launch preferences" >

        <!-- This PreferenceScreen tag serves as a screen break (similar to page break in word processing). Like for other preference types, we assign a key here so it is able to save and restore its instance state. -->
        <PreferenceScreen
            android:key="screen_preference"
            android:summary="展示另一个首选项配置页面"
            android:title="页面首选项" >

            <!-- 你可以在这里放置更多的首选项内容,将被在下一个页面呈现出来 -->
            <CheckBoxPreference
                android:key="next_screen_checkbox_preference"
                android:summary="在另一个页面展示但出于同一个层级的首选项配置"
                android:title="复选框设置" />
        </PreferenceScreen>
        <PreferenceScreen
            android:summary="从一个意图中启动一个activity"
            android:title="意图首选项" >
            <intent
                android:action="android.intent.action.VIEW"
                android:data="http://www.baidu.com" />
        </PreferenceScreen>
    </PreferenceCategory>
    <PreferenceCategory android:title="Preference attributes" >
        <CheckBoxPreference
            android:key="parent_checkbox_preference"
            android:summary="这是一个可见的父类"
            android:title="父类复选框首选项" />
        <!-- 子类的可见类型是由样式属性定义的 -->
        <CheckBoxPreference
            android:dependency="parent_checkbox_preference"
            android:key="child_checkbox_preference"
            android:layout="?android:attr/preferenceLayoutChild"
            android:summary="这是一个可见的子类"
            android:title="子类复选框首选项" />
    </PreferenceCategory>

</PreferenceScreen>

2、创建MyPerferenceFragment.java

public class MyPerferenceFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences); 
    }

}

3、修改MainActivity.java类
public class MainActivity extends Activity {

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

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_settings) {
            FragmentManager fm = getFragmentManager();
            FragmentTransaction transaction = fm.beginTransaction();
            MyPerferenceFragment fragment = new MyPerferenceFragment();
            transaction.replace(R.id.lin, fragment);
            transaction.commit();
        }
        return super.onOptionsItemSelected(item);
    }
}

源代码

参考:http://blog.csdn.net/eyu8874521/article/details/8250611

http://www.linuxidc.com/Linux/2013-09/90299.htm

上一篇:Scala语言入门二(对象)


下一篇:自定义初学2——扩展View