先上效果图:
增加一个设置菜单,点击后弹窗进行选择

1 修改Settings/res/xml/dashboard_categories.xml 在需要放置的位置,添加以下代码

android:id 本dashboard-tile的id号
android:fragment 需要打开的界面所在的类
android:icon 显示的图标
android:title 本菜单的标题


2 添加prefs,这里添加的菜单,不需要lauyout文件,直接使用xml/布局
新建文件Settings/res/xml/robot_speech_pref.xml,带一个ListPreference

<?xml version="1.0" encoding="utf-8"?>    

PreferenceScreen:
android:title 本界面的标题
settings:keywords 搜索关键字?
ListPreference:
android:key 本ListPreference的id
android:title 标题
android:entries 选项列表
android:entryValues 选项列表值


3 添加选项列表
在arrays.xml中添加

  近场模式  远场模式

在strings.xml中添加需要的字符串


4 添加菜单对应的类
该类继承SettingsPreferenceFragment,实现SharedPreferences.OnSharedPreferenceChangeListener接口,用于监听配置改变
将xml加载到界面 调用addPreferencesFromResource(R.xml.robot_speech_pref);
获取保存配置的SharedPreferences speechSP = getPreferenceScreen().getSharedPreferences();
获取R.xml.robot_speech_pref中的元素,我们需要用到的 mWakeupMode = (ListPreference) findPreference(KEY_WAKEUP_MODE);
设置该选项值 mWakeupMode.setValueIndex(index);
设置该选项副标题,或概要 mWakeupMode.setSummary(mWakeupMode.getValue());
获取当前选项值、概要 String value = mWakeupMode.getValue();
获取当前索引 int index = mWakeupMode.findIndexOfValue(value);
注册监听 speechSP.registerOnSharedPreferenceChangeListener(this);
注销监听 speechSP.unregisterOnSharedPreferenceChangeListener(this);
可以参考Settings中的时间日期设置 DateTimeSettings.java 的实现

public class RobotSpeechSettings extends SettingsPreferenceFragment        implements SharedPreferences.OnSharedPreferenceChangeListener {    private static final String TAG = RobotSpeechSettings.class.getSimpleName();    private Context mContext = null;    private static final String SP_SPEECH_FILE = "robot_speech_file";    private static final String SP_WAKEUP_MODE_KEY = "robot_wakeup_mode";    private static SharedPreferences speechSP;    private static final String KEY_WAKEUP_MODE = "wakeup_mode_list";    public static final int WAKEUP_MODE_NEAR_FIELD = 0;    public static final int WAKEUP_MODE_FAR_FIELD = 1;    private static ListPreference mWakeupMode;    @Override    public void onCreate(Bundle icicle) {        super.onCreate(icicle);        mContext = this.getActivity();        addPreferencesFromResource(R.xml.robot_speech_pref);        init();    }    public void init() {        speechSP = getPreferenceScreen().getSharedPreferences();        int index = speechSP.getInt(SP_WAKEUP_MODE_KEY, WAKEUP_MODE_FAR_FIELD);        mWakeupMode = (ListPreference) findPreference(KEY_WAKEUP_MODE);        mWakeupMode.setValueIndex(index);        mWakeupMode.setSummary(mWakeupMode.getValue());    }    @Override    public void onResume() {        super.onResume();        speechSP.registerOnSharedPreferenceChangeListener(this);    }    @Override    public void onPause() {        super.onPause();        speechSP.unregisterOnSharedPreferenceChangeListener(this);    }    @Override    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {        if (key.equals(KEY_WAKEUP_MODE)) {            String value = mWakeupMode.getValue();            int index = mWakeupMode.findIndexOfValue(value);            mWakeupMode.setSummary(value);            if (index == WAKEUP_MODE_NEAR_FIELD) {                // 设置为近场-唤醒模式, 广播给MainService            } else if (index == WAKEUP_MODE_FAR_FIELD) {                // 设置为远场-唤醒模式, 广播给MainService                            }            speechSP.edit().putInt(SP_WAKEUP_MODE_KEY, index).apply();        }    }}

更多相关文章

  1. Android(安卓)Activity界面切换添加动画特效
  2. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  3. Android(安卓)MediaPlayer 常用方法介绍
  4. Android(安卓)流式布局FlowLayout(搜索历史),多布局、删除、添加
  5. Android(安卓)SDK Manager无法更新的解决
  6. Android(安卓)Activity界面切换添加动画特效
  7. [APP] Android(安卓)开发笔记 006-使用短信验证SDK进行短信验证
  8. 修复Android(安卓)App在开机后入口类被启动两次的bug
  9. Android(安卓)实现View中添加子元素的动态效果

随机推荐

  1. android:使用fragment实现tab切换
  2. TextView跑马灯必成五属性
  3. 第5章 Android常见XML属性解析-更新中
  4. android:Button添加图片
  5. Android系统启动——8 附录2:相关守护进程
  6. Android(安卓)屏幕自适应方向尺寸与分辨
  7. Android(安卓)SDK Android(安卓)NDK Andr
  8. Android使用两个Activity页面切换…
  9. Android(安卓)mainfest文件 android属性
  10. Android(安卓)背景图片平铺