------------设置参数--------
camera.java 中声明变量
private ComboPreferences mPreferences;
private PreferenceGroup mPreferenceGroup;
mPreferences 是ComboPreferences(继承SharedPreferences)对象,用于存储 用户点击设置界面保存的数据
mPreferenceGroup是界面列表抽象对象CameraPreference的集合,用于存储camera设置界面的信息
该数据储存在camera_preferences.xml中,初始化mPreferenceGroup
mPreferenceGroup = settings.getPreferenceGroup(R.xml.camera_preferences);
用户点击设置界面做的操作
例如:照片尺寸切换设置等
InLineSettingKnob.java
OnTouchListener mNextTouchListener = new OnTouchListener() {//切换下一个尺寸
public boolean onTouch(View v, MotionEvent event) {
...
if (!mNext && changeIndex(mIndex - 1)){
...
}
}
changeIndex方法执行的操作
protected boolean changeIndex(int index) {
...
mPreference.setValueIndex(mIndex);
if (mListener != null) {
mListener.onSettingChanged();
}
updateView();
...
}
执行ListPreference的persistStringValue方法保存相应的picturesize等信息到ComboPreferences
同时更新执行mListener.onSettingChanged() 将预览参数传递给底层,更新预览效果
执行updateView() 更新设置界面
------------设置列表界面读取参数--------
例如:其他设置 界面
OtherSettingsPopup.java 内部类OtherSettingsAdapter先生设置条目列表
private class OtherSettingsAdapter extends ArrayAdapter<ListPreference> {
...
public View getView(int position, View convertView, ViewGroup parent){
...
view.initialize(pref); // 将对应的ListPreference传递给InLineSettingItem
...
}
...
}
调用InLineSettingItem.java 的initialize
public void initialize(ListPreference preference) {
setTitle(preference);
if (preference == null) return;
mPreference = preference;
reloadPreference();
}
public void reloadPreference() {
mIndex = mPreference.findIndexOfValue(mPreference.getValue());
updateView();
}
调用ListPreference.java的getValue()方法
public String getValue() {
if (!mLoaded) {
mValue = getSharedPreferences().getString(mKey,findSupportedDefaultValue());
mLoaded = true;
}
return mValue;
}
注意:这里的getValue的值是从上面保存的ComboPreferences 获取的,
因此 如果设置过的一些属性 设置界面数据从mPreferences读取,
否则就从mPreferenceGroup(即camera_preferences.xml)读取。