以编程方式设置布局大小是否实际上节省了性能?

时间:2015-02-25 06:56:48

标签: android performance layout

因此,每当我尝试在彼此之间使用layout_weights来实现我想要的布局时,Android Studio就会有用地告诉我nested weights are bad for performance。这里的各种答案都说可以将它们嵌套几层深,但不要过度。我不确定深度有多深,我正在尝试做的是这样的事情:

    //get pix size of device screen
    int[] dimens = ImageUtils.getScreenDimensions(getWindowManager());

    //programmatically set height of my two sections to the percentages that I want
    upper.getLayoutParams().height = (int) (dimens[1]*0.8);
    lower.getLayoutParams().height = (int) (dimens[1]*0.2);

    // do the same thing for the left and right sections of our upper block
    upperLeft.getLayoutParams().width = (int) (dimens[0] * 0.5);
    upperRight.getLayoutParams().width = (int) (dimens[0] * 0.3);

......等等

我的意思是,它有效。我得到一些不错的基于百分比的布局。我的问题是,这实际上对性能有帮助吗?或者我只是以更复杂和更时尚的方式做同样的事情?

编辑:添加所需的布局。我想如果有必要我可以使用网格布局?或者仅仅是旧百分比的工作?

Layout that I want

2 个答案:

答案 0 :(得分:1)

“嵌套布局”意味着Android不知道每个布局应该有多大而不迭代每个布局设置以确定是否应该根据其他布局更改大小。

这意味着“嵌套”可能导致尝试调整每个布局的大量迭代,然后尝试根据父布局和兄弟布局的更改来确定子布局是否发生更改。

如果您可以通过编程方式确定布局的大小(您似乎可以这样做),那么LayoutManager将使用您指定的大小而不是尝试布局屏幕,然后检查是否布局已正确调整大小。

那就是说,如果你只有十几个布局可能并不重要。当需要测量几十个布局(或更多)时,会发生性能损失。这就是为什么很多关于SO的评论说它并不重要 - 大多数时候,屏幕上都会出现几十种布局。 (提示:如果您有ListViewGridView或需要使用不确定数量的布局的东西;那么嵌套事项和回收视图很重要)

答案 1 :(得分:0)

如果这些布局权重不会动态变化,那么最好在XML布局中定义它们。您的意图不仅会更清晰,而且在扩充布局时Android会执行优化。