为了使用Android SDK提供的布局优化工具,需要使用命令行。
我们强烈建议您将Android工具路径添加到操作系统的路径设置中。 这将使得通过名称运行特定工具更容易,而不必给出其文件位置的完整路径。 Android SDK中现在有两个工具目录:/ tools和/ platform-tools。 layoutopt工具是本教程中使用的主要工具,位于/ tools目录中。 (例如,可以在/ platform-tools目录中找到ADB工具。)
运行layoutopt工具
运行layoutopt工具是简单的命令行选项。 只需使用单个布局文件或布局文件目录作为选项运行它。
注意,你必须包括所讨论的布局文件或目录的完整路径,即使它在当前工作目录中。
没有发现任何问题的layoutopt:它与单个布局文件或布局文件的目录作为选项。
如果不包括布局文件的完整路径,则输出不显示任何内容:
检查结果示例
layoutopt的结果只是建议。 让我们来看看运行layoutopt工具可能产生的建议的几个例子。
无用的布局
我们在布局设计中尝尝会出现一些未使用或放弃使用的控件。例如:
该工具告诉我们,LinearLayout中的LinearLayout是不必要的:
11:17 This LinearLayout layout or its LinearLayout parent is useless
根布局可被替代
输出:
5:22 The root-level <FrameLayout/> can be replaced with <merge/>
10:21 This LinearLayout layout or its FrameLayout parent is useless
结合两条建议,由于我们希望两个TextView垂直排列,因此LinearLayout应该保留。基于第二条建议,我们可以删除无用的FrameLayout而不是替换为merge。
过多Views
布局中的每个View都需要占用内存,在布局中放置过多的View,布局将占用大量内存。假如,有一个超过80个View的布局。layoutopt工具可能显示以下输出:
-1:-1 This layout has too many views: 83 views, it should have <= 80!
-1:-1 This layout has too many views: 82 views, it should have <= 80!
-1:-1 This layout has too many views: 81 views, it should have <= 80!
过多Levels
类似,布局也不应该太深层次的嵌套。建议将布局保持在10级以下。可以使用RelativeLayout解决深层次的布局嵌套。
-1:-1 This layout has too many nested layouts: 12 levels, it should have <= 10!
305:318 This LinearLayout layout or its RelativeLayout parent is possibly useless
307:314 This LinearLayout layout or its FrameLayout parent is possibly useless
310:312 This LinearLayout layout or its LinearLayout parent is possibly useless