Android性能优化之界面UI篇
1、使用style、color、string、dimen样式来分离xml布局文件,减少代码的重复使用,增加代码复用率,防止hardcode,下面是一个例子:
在定义layout时候,因为每个View或ViewGroup都必须要有layout_width和layout_height,所以我们可以专门定义一个size_style.xml,里面的内容为:
<resources>
<style name="wrap">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
<style name="match">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
</style>
<style name="matchWidth_wrapHeight">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
</style>
<style name="matchHeight_wrapWidth">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
</style>
<style name="matchWidth_0dpHeight">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">0dp</item>
</style>
<style name="_0dpWidth_matchHeight">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">match_parent</item>
</style>
<style name="_0dpWidth_0dpHeight">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">0dp</item>
</style>
<style name="wrapWidth_0dpHeight">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">0dp</item>
</style>
<style name="_0dpWidth_wrapHeight">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
</style>
</resources>
这样,我们在定义布局的时候便可以这样定义:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/match"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Button
style="@style/matchWidth_wrapHeight"
android:text="@string/button" />
<LinearLayout
style="@style/matchWidth_wrapHeight"
android:weightSum="3">
<Button
style="@style/_0dpWidth_wrapHeight"
android:layout_weight="1"
android:text="@string/button" />
<Button
style="@style/_0dpWidth_wrapHeight"
android:layout_weight="1"
android:text="@string/add" />
<Button
style="@style/_0dpWidth_wrapHeight"
android:layout_weight="1"
android:text="@string/delete" />
</LinearLayout>
</LinearLayout>
如:
这样做的好处是代码更简洁,而且代码复用率高,假如还定义了其它的style(比如背景、字体大小、字体颜色、margin等),我们可以继承size_style并引入其它的样式,代码为:
<style name="buttonStyle" parent="matchWidth_wrapHeight">
<item name="android:textColor">#ffffff</item>
<item name="android:layout_margin">15dp</item>
<item name="android:textSize">14sp</item>
<item name="android:background">#673AB7</item>
</style>
如:
2、在视图有变化的ViewGroup中,比如在这个界面中有视图的添加或者删除,可以在ViewGroup中设置这个属性:
android:animateLayoutChanges="true"
这样,视图的添加和删除就有默认的动画效果了,使得界面变换更加平滑,如:
3、在ListView或者GridView内容为空的时候,可以设置个默认视图,如:
mListView.setEmptyView(View view);
4、当需要设置一个View的动画时候,可以通过View.animate()快捷得到ViewPropertyAnimator进而设置动画效果,如:
这里设置View在y轴平移了10个像素
mView.animate().translationY(10).setDuration(300).start();
当然还可以通过代码定义一个ObjectAnimator或者通过xml在animator目录下新建动画
5、对于简单的图形图片,可以使用矢量图片,关于矢量图片的更多介绍见w3c组织,矢量图形拥有很好的屏幕适配性,色彩分辨率非常高,便于更改,同时也能够减少内存的占用,而平常普通的图片资源都是位图资源,对内存的消耗很明显,所以可以用矢量图的情况下最好用矢量图
6、对于整个应用中需要用到的颜色和字体大小,可以单独定义两个style供整个app使用,如:
颜色:
<?xml version="1.0" encoding="utf-8">
<resources>
<color name="primarycolor_dark">#0e5a83</color>
<color name="primarycolor">#0680c3</color>
<color name="primarycolor_light">#489dca</color>
<color name="secondary_light">#999999</color>
<color name="secondary">#565656</color>
<color name="secondary_dark">#4b4b4b</color>
<color name="secondary_extraDark">#231f20</color>
<color name="highlight_one">#35791d</color>
<color name="highlight_two">#ff5151</color>
<color name="main_bg">#ecf0f3</color>
<color name="button_pressed">#036194</color>
<color name="button_default">#0680c3</color>
</resources>
字体:
<?xml version="1.0" encoding="utf-8">
<resources>
<dimen name="text_mirco">12sp</dimen>
<dimen name="text_mini">14sp</dimen>
<dimen name="text_ultraSmall">16sp</dimen>
<dimen name="text_moderate1">18sp</dimen>
<dimen name="text_moderate2">20sp</dimen>
<dimen name="text_moderate3">22sp</dimen>
<dimen name="text_big">25sp</dimen>
</resources>
7、Android系统提供了自动根据设备显示能力使用最合适的资源的能力,基本所有的资源都支持通过一定规则来动态切换。即假如在sdk版本为21的情况下,那么系统则先会找是否有values-v21等文件夹如果有则用这个文件夹下的资源,如果没有则才用values中的资源,可以说values是默认的资源目录。比如在不同版本的sdk中,创建res/values-v21等目录让系统自动获取合适的资源,在不同大小的屏幕上可以通过提供一个res/layout-small/文件夹来为小尺寸的设备提供定制化的布局,通过提供一个res/layout-large/文件夹来为大屏幕手机提供定制化布局
Android性能优化之界面UI篇的更多相关文章
- 【Bugly干货】Android性能优化典范之多线程篇
本文涉及的内容有:多线程并发的性能问题,介绍了 AsyncTask,HandlerThread,IntentService 与 ThreadPool 分别适合的使用场景以及各自的使用注意事项,这是一篇 ...
- Android 性能优化之减少UI过度绘制
什么是过度绘制(OverDraw) 在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次.这样就会浪费大量的CPU以及GPU资源.过度绘制最直观的影响就是会导致 ...
- [Android 性能优化系列]内存之提升篇--应用应该怎样管理内存
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...
- 【转】Android性能优化之布局优化篇
转自:http://blog.csdn.net/feiduclear_up/article/details/46670433 Android性能优化之布局优化篇 分类: andorid 开发2015 ...
- [Android 性能优化系列]降低你的界面布局层次结构的一部分
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...
- Android性能优化第(三)篇---MAT比Menmery Monitor更强大
作者 LooperJing 2016.11.17 16:42* 字数 1687 阅读 1603评论 3喜欢 21 在Android性能优化第(一)篇---基本概念中讲了JAVA的四大引用,讲了一下GC ...
- (转)Android性能优化——工具篇
Android性能优化是Android开发中经常遇见的一个问题,接下来将对Android性能优化方面的知识点做一个简单的梳理和总结,将从工具和代码两方面进行梳理.所谓工欲善其事必先利其器,本文首先来看 ...
- [Android 性能优化系列]内存之基础篇--Android怎样管理内存
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地 ...
- 【腾讯Bugly干货分享】Android性能优化典范——第6季
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/580d91208d80e49771f0a07c 导语 这里是Android性能优 ...
随机推荐
- PGM:贝叶斯网的参数估计
http://blog.csdn.net/pipisorry/article/details/52578631 本文讨论(完备数据的)贝叶斯网的参数估计问题:贝叶斯网的MLE最大似然估计和贝叶斯估计. ...
- Java编程思想阅读收获
15年8月份买了一本Java编程思想第四版中文版.之所以买中文版是因为我试读了同事的英文版发现自己英语水平还是有限,单词虽然认识,但对很多句子把握不准,这样看书太慢了,要理解英文还要理解技术有些hol ...
- Redis 学习笔记4: Redis 3.2.1 集群搭建
在CenOS 6.7 linux环境下搭建Redis 集群环境 1.下载最新的Redis版本 本人下载的Redis版本是3.2.1版本,下载之后,解压,编译(make): 具体操作可以参考我的博文:R ...
- ArrayList、HashMap、HashSet源码总结
ArrayList: 1. ArrayList是List接口的大小可变数组的实现,此实现是不同步的. 2. ArrayList内部使用类型为Object[]的数组存储元素. 3. ArrayList默 ...
- 浅谈SSH框架
在学习或者接触一个新的概念的时候,我们应该在脑海中发挥我们的搜索引擎,牵一发动全身的去想,这个知识跟我之前接触过的有哪些相同或者不同的地方,从这个角度去看那些新的知识和概念,经过旧知识和新知识的对比我 ...
- 6.0、Android Studio性能优化工具
显示图像包含四个步骤.简单来说,CPU对比显示列表,GPU渲染图片显示,内存存储图片和数据,电池提供点力能源.每个部分的硬件都有限制,超过这个限制会导致应用运行较慢,显示性能差,或者耗电. 为了查找造 ...
- Android开发学习之路--RxAndroid之操作符
学习了RxAndroid的一些基本知识,上篇文章也试过了RxAndroid的map操作符,接着来学习更多的操作符的功能吧. 操作符就是为了解决对Observable对象的变换的问题,操作符用于 ...
- androidpn-server笔记及BUG修改
上篇讲了androidpn的client端,这篇该讲一下我使用androidpn-server端的笔记了. 这里我使用的androidpn是tomcat版的,由不知哪位大神移植并修复了部分bug的版本 ...
- ROS_Kinetic_22 使用ROS的qt插件即ros_qtc_plugin实现Hi ROS!!!!
官网已经更新了教程说明,在此特别说明: https://github.com/ros-industrial/ros_qtc_plugin/wiki This wiki explains the pro ...
- Qt中事件分发源代码剖析
Qt中事件分发源代码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,并且进行分发,这些都是在exec中进行的. 下面举例说明: 1)首先看看下面一段示例代码: i ...