android实现用户选项和设置界面

来源:互联网 发布:拷贝网站软件 编辑:程序博客网 时间:2024/06/08 18:17

1. 在资源文件的xml文件夹(如不存在就自己创建)下面创建headers_preferences.xml文件

<?xml version="1.0" encoding="UTF-8"?><preference-headers        xmlns:android="http://schemas.android.com/apk/res/android">    <header android:fragment="com.example.usersetting.SettingsActivity$SettingsFragment"            android:title="Prefs 1"            android:summary="An example of some preferences." /></preference-headers>

2. 在PreferenceActivity类中加载该文件

<pre name="code" class="java">@Overridepublic void onBuildHeaders(List<Header> target) {//加载headers布局loadHeadersFromResource(R.xml.headers_preferences, target);}

3. 并且在PreferenceActivity类中创建PreferenceFragment类来加载具体布局

public static class SettingsFragment extends PreferenceFragment {<span style="white-space:pre"></span>private static final String TAG = "SettingsFragment";        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            // Can retrieve arguments from headers XML.            Log.i(TAG,"设置默认值");            PreferenceManager.setDefaultValues(getActivity(), R.xml.settings_preferences, false);            // Load the preferences from an XML resource            addPreferencesFromResource(R.xml.settings_preferences);        }    }
该fragment使用addPreferencesFromResource方法加载xml文件,其布局文件代码如下:
<?xml version="1.0" encoding="UTF-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">    <PreferenceCategory android:title="@string/settings_title">        <CheckBoxPreference            android:title="@string/wifi_title"            android:key="wifiTitle"            android:defaultValue="true"            />        <CheckBoxPreference            android:title="@string/wifi_title"            android:defaultValue="false"            />        <EditTextPreference                android:key="edittext_preference"                android:title="@string/edit_title"                android:summary="@string/edit_summary"                android:dialogTitle="@string/edit_dialog_title" />    </PreferenceCategory></PreferenceScreen>
设置默认值问题:
1. 可以在PreferenceFragment对应的布局文件中设置默认值,即设置组件的defalueValue属性
2. 可以使用SharedPreferences来设置默认值,利用key/value形式
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());preferences.getBoolean("wifiTitle", false);
SharedPreferences.getBoolean方法在xml文件中没有设置默认值时生效,如:CheckBoxPreference设置了defalueValue属性,加载时就依照该属性;没有设置defaultValue属性,则getBoolean自动设置其属性,保存在偏好文件中
3. 当用户自身修改了默认值,PreferenceFragment会自动保存其修改的值

0 0