0%

PreferenceActivity的使用 程序动态添加修改Preference

PreferenceActivity的XML中主要有7种元素,分别是PreferenceScreen(根元素),CheckBoxPreference(CheckBox选项,如系统设置-无线网络里的飞行模式),EditTextPreference(弹出一个EditText),ListPreference(弹出一个选择列表),Preference(只显示文本,需要在代码中添加点击事件),PreferenceCategory(分组标题栏),RingtonePreference(铃声设置)。 下面写个小例子: 添加类型为Preference的xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="播放设置">
        <ListPreference android:title="播放服务器" android:summary="设置默认播放服务器,默认为1号服务器" android:entries="@array/server" android:entryValues="@array/server"
            android:dialogTitle="选择播放服务器" android:key="server_list">
        </ListPreference>
        <ListPreference android:title="播放模式" android:summary="模式1不支持MoboPlayer" android:entries="@array/play_mode" android:entryValues="@array/mode_value"
            android:dialogTitle="选择播放服务器" android:key="play_mode">
        </ListPreference>
        <ListPreference android:title="播放器" android:summary="设置默认播放器" android:dialogTitle="选择已安装播放器" android:key="player">
        </ListPreference>

    </PreferenceCategory>
    <PreferenceCategory android:title="帮助">
        <Preference android:title="查看帮助" android:summary="如果您有问题,请先查看帮助" android:key="help" />
    </PreferenceCategory>
    <PreferenceCategory android:title="反馈">
        <Preference android:title="用户反馈" android:summary="您对我们有什么意见,可以联系我们" android:key="feedback" />
    </PreferenceCategory>
</PreferenceScreen>

android:title即大号字体显示的标题,android:summary即短描述,android:key即保存该值的key,对ListPreference而言,还有android:entries,android:entryValues分别是显示的列表数据,和保存的值。 其中第三个ListPreference并没有设置android:entries,android:entryValues,我们将在Java代码中设置。

public class Setting extends PreferenceActivity {
    Dialog dialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.setting);
        dialog=new Dialog(this);
        //自己写的用于执行相应操作的类
        ListPreference pre=(ListPreference)findPreference("player");
        pre.setEntries(new CharSequence[]{"Moboplayer","Vplayer","RockPlayer"});
        pre.setEntryValues(new CharSequence[]{"0","1","2"});
        //动态设置ListPreference
        
    }



    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        // TODO Auto-generated method stub
        String key=preference.getKey();
        //根据被点击项的key执行相应操作
        if(key.equals("help"))
        {
            dialog.showHelp();
        }
        if(key.equals("feedback"))
        {
            dialog.feedBack();
        }
        return super.onPreferenceTreeClick(preferenceScreen, preference);
    }

}