Android PreferenceScreen

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Android PreferenceScreen相关的知识,希望能为你提供帮助。
  https://blog.csdn.net/weixin_43529377/article/details/98963095
PreferenceScreen和fragment结合
一、监听事件
1.1、onPreferenceChange

public boolean onPreferenceChange(Preference preference, Object objValue) { return false; }

【Android PreferenceScreen】说 明: 当Preference的元素值发送改变时,触发该事件。
返回值: true 代表将新值写入sharedPreference文件中。
false 则不将新值写入sharedPreference文件。
1.2、onPreferenceClick
public boolean onPreferenceClick(Preference preference) { return false; }

说明:当点击控件时触发发生,可以做相应操作。
参数说明: preference 点击的对象。
返回值:true,不执行onPreferenceTreeClick
1.3、onPreferenceTreeClick
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { return super.onPreferenceTreeClick(preferenceScreen, preference); }

说 明: 当Preference控件被点击时,触发该方法。
参数说明: preference 点击的对象。
返 回 值:true 代表点击事件已成功捕捉,无须执行默认动作或返回上层调用链。 例如, 不跳转至默认Intent。
false 代表执行默认动作并且返回上层调用链。例如,跳转至默认Intent。
1.4、点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值,
然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick和onPreferenceTreeClick方法中我们得到的控件值就是最新的Preference控件值。
二、daemo
Android PreferenceScreen

文章图片

2.1、activity_main.xml
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.gatsby.preferencesreen.MainActivity" > < fragment android:id="@+id/settingsFragment" android:name="com.gatsby.preferencesreen.MainActivity$SettingsFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> < /LinearLayout>

2.2、R.xml.preferences
< ?xml version="1.0" encoding="utf-8"?> < PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > < PreferenceCategory android:title="标题--开关按钮" > < CheckBoxPreference android:key="checkbox_preference" android:summary="这是一个开关按钮" android:title="开关偏好" /> < /PreferenceCategory> < PreferenceCategory android:title="自定义偏好" > < Preference android:key="preference" android:summary="这是一个自定义按钮" android:title="自定义" /> < /PreferenceCategory> < /PreferenceScreen>

2.3、MainActivity.java
package com.gatsby.preferencesreen; import android.app.Activity; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.util.Log; public class MainActivity extends Activity { private static final String KEY_CHECKBOX = "checkbox_preference"; private static final String KEY_PREFERENCE = "preference"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public static class SettingsFragment extends PreferenceFragment implements OnPreferenceChangeListener, OnPreferenceClickListener {CheckBoxPreference checkbox_preference; Preference preference; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); checkbox_preference = (CheckBoxPreference) findPreference(KEY_CHECKBOX); checkbox_preference.setOnPreferenceChangeListener(this); preference = (Preference) findPreference(KEY_PREFERENCE); preference.setOnPreferenceClickListener(this); }@Override public boolean onPreferenceChange(Preference preference, Object objValue) { // TODO Auto-generated method stub final String key = preference.getKey(); if (KEY_CHECKBOX.equals(key)) { boolean isCheck = (Boolean) objValue; if (isCheck) { Log.d("gatsby", "isCheck"); } else { Log.d("gatsby", "not Check"); } } return true; }@Override public boolean onPreferenceClick(Preference preference) { // TODO Auto-generated method stub final String key = preference.getKey(); if (KEY_PREFERENCE.equals(key)) { Log.d("gatsby", "preference"); } return false; }@Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { // TODO Auto-generated method stub final String key = preference.getKey(); if (KEY_PREFERENCE.equals(key)) { Log.d("gatsby", "preference TreeClick!"); } return super.onPreferenceTreeClick(preferenceScreen, preference); } } }


二.os android7.1 删除Preference
< PreferenceCategory android:key="debug_networking_category" android:title="@string/debug_networking_category"> < SwitchPreference android:key="wifi_display_certification" android:title="@string/wifi_display_certification" android:summary="@string/wifi_display_certification_summary"/> < ListPreference android:key="select_usb_configuration" android:title="@string/select_usb_configuration_title" android:dialogTitle="@string/select_usb_configuration_dialog_title" android:entries="@array/usb_configuration_titles" android:entryValues="@array/usb_configuration_values" /> < SwitchPreference android:key="bluetooth_disable_absolute_volume" android:title="@string/bluetooth_disable_absolute_volume" android:summary="@string/bluetooth_disable_absolute_volume_summary"/> < /PreferenceCategory>

  2.1.删除PreferenceCategory
final PreferenceGroup debugNetworkingCategory = (PreferenceGroup) findPreference(DEBUG_NETWORKING_CATEGORY_KEY); debugNetworkingCategory.removePreference(mWifiDisplayCertification); //1 getPreferenceScreen().removePreference(debugNetworkingCategory);

  三.Preferences  ListPreference
< ?xml version="1.0" encoding="utf-8"?> < PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="flight_option_preference"按:可以通过key来获取preference,类似于view的android:id android:title="My Preferences"按:对于最top的PreferenceScreen,此为Activity的title android:summary="设置航线排序选项"> < ListPreference android:key="selected_flight_sort_option"按:可以通过key来获取preference android:title="Flight Options" android:summary="Set Search Options" android:entries="@array/flight_sort_options"按:list的内容 android:entryValues="@array/flight_sort_options_values" 按:list各内容对应的value android:dialogTitle="Choose Flight Options" android:defaultValue="https://www.songbingjia.com/android/1"/> < !-- 对应为entryValues的值,缺省1,即缺省为Number of Stops。 --> < /PreferenceScreen>



 


    推荐阅读