原生camera应用 保存设置界面参数方法

------------设置参数--------

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)读取。

原文地址:https://www.cnblogs.com/adamli/p/3225031.html