美文网首页
使用PreferenceFragment编写设置界面

使用PreferenceFragment编写设置界面

作者: Artyhacker | 来源:发表于2016-12-08 16:37 被阅读0次

    一个简单示例:点击弹出选项

    1. 在res目录下新建xml目录,在其中创建xml文件,应以<PreferenceScreen>为根标签,在其中放入需要的其他标签:
      <?xml version="1.0" encoding="utf-8"?>
      <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
          <ListPreference
              android:title="@string/pref_title"
              android:key="@string/pref_key"
              android:entries="@array/pref_entries"
              android:entryValues="@array/pref_values"
              android:defaultValue="@string/pref_default"
              android:summary="@string/pref_summary"/>
      

    </PreferenceScreen>

    ```
    - key值相当于此ListPreference标签的id
    - entries为选项条目,在string.xml中建立``<string-array>``标签:
        ```xml
        <string-array name="pref_entries">
            <item>选项1</item>
            <item>选项2</item>
        </string-array>
        
        ```
    - entryValues为条目对应的值,同样在string.xml中:
        ```xml
        <string-array name="pref_values">
            <item>1</item>
            <item>2</item>
        </string-array>
        
        ```
    - defaultValues为默认选项,填入values中的一个值即可,如“1”。
    - summary为描述信息
    
    1. 创建SettingsFragment类继承PreferenceFragment,加载xml文件,实现OnPreferenceChangeListener接口(可选):

      public class SettingFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener{
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              addPreferencesFromResource(R.xml.pref_general); //加载xml
          }
      
          @Override
          public boolean onPreferenceChange(Preference preference, Object newValue) {
              String stringValue = newValue.toString();
              if(preference instanceof ListPreference) {
                  ListPreference listPreference = (ListPreference) preference;
                  int index = listPreference.findIndexOfValue(stringValue);
                  if(index >= 0) {
                      preference.setSummary(listPreference.getEntries()[index]);
                  }
              } else {
                  preference.setSummary(stringValue);
              }
              return true;
          }
      }
      
      
    2. 在SettingActivity中的onCreate方法中添加Fragment:

      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          getFragmentManager().beginTransaction().add(android.R.id.content, new SettingFragment()).commit();
      }
      
      
    3. 根据ListPreference的key值获取设置的选项,做出响应:

      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
      String select = prefs.getString(getString(R.string.pref_key), getString(R.string.pref_default));
      if ("1".equals(select)) {
          //TODO
      }
      else if ("2".equals(select)) {
          //TODO
      }
      
      

    相关文章

      网友评论

          本文标题:使用PreferenceFragment编写设置界面

          本文链接:https://www.haomeiwen.com/subject/hvesmttx.html