最近的项目一直是按照PRD与高清,修改系统设置,调整布局、间距、颜色,涉及到一些流程的更改与自定义控件,以及对settings源码结构的研究。在项目相对空闲是,做个整理记录。由于项目依赖系统源码环境,而且在赶项目的时候,只能以最快的速度解决当前的问题,而下面的设计的代码与效果图,都是个人封装的DEMO测试,毕竟不能仅仅只是最求项目的解决过关,学过用过,就应该做点总结,毕竟我觉得很多东西,在赶项目的时候是无法去过多的仔细研究,所以有居多“废代码”,很多地方是值得仔细研究与优化改进的。
首先对原生Settings的布局,及切换跳转,按照我的研究理解,做个流程的分析简介,后面会给出我的改进与实现
1.先从布局简单的说起:
在PreferenceActivity中 可以看到:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.android.internal.R.layout.preference_list_content);
系统默认会加载这个布局文件,它是一个左右分屏的,左边是一个ListView,右边是一个android.preference.PreferenceFrameLayout,左边ListView 负责切换,右边显示相应的Fragment。可以到sdk目录下查看该布局文件(sdk\platforms\android-17\data\res\layout\preference_list_content)
2.右边ListView的显示。
代码详见内部类:HeaderAdapter。
//类型一,分类title,无焦点,不可点击
static final int HEADER_TYPE_CATEGORY= 0;
//类型二,正常的可点击的header项
static final int HEADER_TYPE_NORMAL = 1;
//带 switch 开关的header项
static final int HEADER_TYPE_SWITCH = 2;
三种类型,分别对应的布局:
case HEADER_TYPE_CATEGORY://下划线样式的TextView
view = new TextView(getContext(), null,android.R.attr.listSeparatorTextViewStyle);
case HEADER_TYPE_SWITCH://含有switch 控件的布局
view = mInflater.inflate(R.layout.preference_header_switch_item, parent,false);
case HEADER_TYPE_NORMAL:
view = mInfla