0

我有一个相对较大的 XML 布局(38 kB,600 行),其层次结构如下:

<ScrollView>
 <LinearLayout>
  <TabHost>
   <LinearLayout> 
    <FrameLayout> //tab widget
     <LinearLayout> //tab content
      <LinearLayout> //section
       <TextView> //section name
       <LinearLayout orientation="horizontal"> //item 1 box
        <TextView> //item 1 title
        <Spinner> //item 1 picker
       </LinearLayout>
       <LinearLayout> //item 2 box
        <TextView> //item 2 title
        <Spinner> //item 2 picker
       </LinearLayout>
       ...  //18 other items
      </LinearLayout>
      ... //4 other sections with 15 items each
</>

这是一个必须有这么多项目的数据输入表单,我现在能做的最好的事情就是setContentView使用“正在加载...”对话框将数据包装并加载到 AsyncTask 中的微调器。

广泛使用主题是否也会减缓视图膨胀?view inflater 不需要查看加载的 theme.xml,但如果我要将主题内联到布局 xml 中,它也会大大增加 XML 的大小,从而减慢解析器的速度。

我可以做些什么来简化布局,使其加载速度至少提高一倍?我在想我可能会尝试摆脱水平线性布局,并使用 TableLayout 构建“部分”。

4

2 回答 2

6

首先,三个一般性评论:

  1. 真的想避免深度嵌套的布局。
  2. 考虑使用RelativeLayout替换嵌套LinearLayouts的 .
  3. 使用该layout_opt工具获取有关布局优化的一些建议。

现在,关于#1 的更多信息……您是否考虑过编写自己的布局?起初听起来很复杂,但有时可以极大地提高布局性能。例如,如果RelativeLayout不能达到目的,您可以将您的 Linear-Frame-Linear-Linear 链组合成一个自定义布局。

最后,您的标签指示器可滚动是否有原因?这似乎是一个导航/用户体验问题。

于 2011-08-18T03:13:40.990 回答
-1

我唯一能想到的就是将您的视图分成几个不同的部分,并在用户到达该部分时膨胀每个视图。不确定这是否有帮助,但祝你好运。

也可能有助于查看 traceview 中的那部分代码

于 2011-08-18T03:12:52.483 回答