针对布局优化的几点笔记:
1.一个FrameLayout内的LinearLayout,两者都被设置为MATCH_PARENT,这样做没什么实际的意义,只是增加了填充它们的时间。特别是在对一个已有的布局做了重大调整或者再已有布局上添加子布局的时候,需要查找冗余布局。
2.当设置为MATCH_PARENT的FrameLayou被添加到一个父容器时,它就会成为冗余。更好的选择是使用merge标签:
<merge xmlns:android="http://schemas.android.com/apk/res/android"><ImageView....
当包含有merge标签的布局被添加到另一个布局时,该布局的merge节点会被删除,而该布局的子View会被直接添加到新的父布局中。merge标签结合include标签一起使用时尤其有用。
//查找stub
View stub = findViewById(R.id.download_progress_stub);
//将其设置为可见,以填充子布局
stub.setVisibility(View.VISIBLE);
//查找已填充的stub布局的根节点
View downloadProgressPanel = findViewById(R.id.download_progress_panel);
ViewStub只能Inflate一次,之后ViewStub对象会被置为空。按句话说,某个被ViewStub指定的布局被Inflate后,就不会够再通过ViewStub来控制它了.
4.使用Lint工具来分析布局,Lint是一个强大的工具用来检测应用程序中的问题,包括布局的性能问题。还可以用来检测缺少的翻译、未使用的资源、不一致的数组大小、可访问性和国际化问题、丢失或重复的图像资源、可用性问题和manifest错误。
想要应用众多默认过度动画中的一个,可以对任何Fragment Transaction使用setTransition方法,传入一个FragmentTransaction.TRANSIT_FRAGMENT_*常量。也可以通过使用setCustomAnimations方法对Fragment Transaction应用自定义动画。这个方法接收两个动画XML资源:一个是通过该事务添加到布局的Fragment,而另一个是被删除的Fragment:
fragmentTransaction.setCustomAnimations(R.animator.slide_in_left,R.animator.slide_out_right);当在布局内替换Fragment时,这种方式对于添加无缝动态过度尤其有用。
另:随着Android3.0中Animator类的引入,Android动画库有了显著的改进。为运行在API level 11及以上版本的设备构建的应用程序应该使用Animator资源,而那些为了支持更早版本而使用支持库的应用程序,应该使用老的View Animation资源。
也可以创建没有UI的Fragment来提供后台行为,该行为会一直持续到Activity重新启动。这特别适合于定期和UI交互的后台任务或者当因配置改变而导致的Activity重新启动时,保存状态变得特别重要的场合。