UI最佳实践的N条建议
1、避免嵌套过多层级的布局
每个布局(layout),控件(Button、TextView等),都需要进行初始化,测量大小、定位以及绘制。布局里嵌套了过多的层级将带来相当大的性能开销,官方提供了Hierarchy [ˈhaɪərɑ:rki] Viewer工具来帮助我们查找可能的优化点
2、避免使用layout_weight属性
layout_weight属性能够让我们根据实际设备的界面大小来动态的调整控件的尺寸。但在Android系统的实现上,对每个指定了layout_weight属性的布局、控件,系统都会执行两次的测量计算
3、重用布局
将在多个布局中会用到的部分抽离出来放在一个xml文件中。然后使用include标签来导入这个布局。抽离出来的布局文件的根节点布局就是你希望它导入其他布局文件之后出现在那个位置的布局,如果不需要这样一个布局,则可以用merge标签作为根节点
4、使用ViewHolder技术来优化ListView
首先需要创建一个ViewHolder类来持有View的引用:
1. static class ViewHolder {
2. TextView text;
3. TextView timestamp;
4. ImageView icon;
5. ProgressBar progress;
6. }
然后实例化ViewHolder并为其赋值,再将ViewHolder存储在view的tag里:
1. ViewHolder holder = new ViewHolder();
2. holder.text = (TextView) convertView.findViewById(R.id.list_item_text);
3. holder.timestamp = (TextView) convertView.findViewById(R.id.list_item_timestamp);
4. holder.icon = (ImageView) convertView.findViewById(R.id.list_item_icon);
5. holder.progress = (ProgressBar) convertView.findViewById(R.id.list_item_progress);
6. convertView.setTag(holder);
之后就可以从convertView的tag里取出ViewHolder来直接访问对应的控件进行操作了
1. ViewHolder holder = (ViewHolder) convertView.getTag();
2. holder.text.setText(text);
3. // ...这里省略对其他控件的操作
5、为不同尺寸、像素密度的设备提供对应分别率的图片资源
这个在学习Android工程目录结构的时候就应该有所了解。现在一般会提供mdpi、hdpi、xhdpi、xxhdpi四种大小的资源图片,这样就能保证你的应用在绝大部分设备上的拥有良好的图片显示效果。需要注意的是ldpi这个规格已经废弃了,不需要再提供这个大小的资源
6、去掉没必要的背景
7、按需显示占位背景图,比如:图片加载成功后去掉背景