编写程序配置、设置界面,你还在用listview吗,还在使用自定义dialog吗?

来源:互联网 发布:mac下客户端看视频 编辑:程序博客网 时间:2024/06/05 10:57
编写程序配置、设置界面,你还在用listview吗,还在使用自定义dialog吗?记得自己在写第一个android应用的时候就干过这“蠢”事,不过以后都不用这么辛苦了,android不仅有封装好的组件(如:CheckBoxPreference,ListPreference),还有一个PreferenceActivity。

下边简单得用一个例子展示一下用法:
在Android项目中新建一个名为xml的文件夹,创建一个名(名字不限)为prefs.xml的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:title="@string/settings" >

    <CheckBoxPreference
        android:key="check_pref"
        android:summary="summary"
        android:title="title" />

    <ListPreference
        android:key="list_pref"
        android:defaultValue="1"
        android:dialogTitle="dialog_title"
        android:entries="@array/entries"
        android:entryValues="@array/entry_values"
        android:summary="setting_summary"
        android:title="title" />

</PreferenceScreen>

上边文件中的
        android:entries="@array/entries"
        android:entryValues="@array/entry_values"
是在strings.xml中定义的,内容是:
    ...
    <!-- for example -->
    <string-array name="entry_values">
        <item>0</item>
        <item>1</item>
        <item>2</item>
    </string-array>

    <!-- for example -->
    <string-array name="entries">
        <item>None</item>
        <item>Snooze</item>
        <item>Dismiss</item>
    </string-array>
    ...

最后,java文件如下:
package com.xxx.pref;

import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;

public class TestPreferenceActivity extends PreferenceActivity implements
          Preference.OnPreferenceChangeListener {

     private static final String KEY_CHECK_PREFS = "check_pref";
     private static final String KEY_LIST_PREFS = "list_pref";

     @Override
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          addPreferencesFromResource(R.xml.prefs);
     }

     @Override
     protected void onResume() {
          super.onResume();
          refresh();
     }

     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
               Preference preference) {
          return super.onPreferenceTreeClick(preferenceScreen, preference);
     }

     public boolean onPreferenceChange(Preference pref, Object newValue) {
          p("pref: " + pref);
          p("newValue: " + newValue);
          return true;
     }

     private void p(String str) {
          Log.i("chencc", str);
     }

     private void refresh() {
          final CheckBoxPreference checkPref = (CheckBoxPreference) findPreference(KEY_CHECK_PREFS);
          checkPref.setOnPreferenceChangeListener(this);
         
          final ListPreference listPref = (ListPreference) findPreference(KEY_LIST_PREFS);
          listPref.setSummary(listPref.getEntry());
          listPref.setOnPreferenceChangeListener(this);
     }
}

更多内容参考android.preference包。
原创粉丝点击