如何优化此布局?

时间:2013-01-07 14:01:59

标签: android android-layout optimization

我正在尝试通过展平视图层次结构来优化Android应用中的布局。这是一个特别困难的人!

A very inefficient layout

此布局有一个主要的LinearLayout来保存顶行和底行(它们本身就是水平子LinearLayouts)。中间的四个项目中的每一个都是使用layout_weights展开的垂直RelativeLayout(以容纳ImageView和textView)。每行包含两个项目也是水平LinearLayout。

毋庸置疑,这种布局是非常低效的,导致很多“Choreographer跳过帧”消息被绘制时。我想要消除这些嵌套的布局,但是AFAIK RelativeLayout无法有效地将行中的项目水平间隔开,并且中心的两行垂直。另外,我考虑用复合drawable替换ImageView和TextView,但我不知道如何控制drawable的大小。

感谢任何帮助!

修改: 这是布局的粗略描述。

<!-- The top bar -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="80dip"
android:background="@drawable/some_image">
    ...
</LinearLayout>

<!-- Central Layout -->
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="2"
android:orientation="vertical">

    <!-- First Row -->
    <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:baselineAligned="false"
    android:layout_marginTop="10dp"
    android:layout_weight="1"
    android:weightSum="2">


        <!-- Item 1 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

        <!-- Item 2 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

    </LinearLayout>
    <!-- End of first row layout -->

    <!-- Second Row -->
    <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:baselineAligned="false"
    android:layout_marginTop="10dp"
    android:layout_weight="1"
    android:weightSum="2">


        <!-- Item 3 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

        <!-- Item 4 -->
        <RelativeLayout
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:gravity="center_vertical">

         <!-- ImageView and TextView here -->

        </RelativeLayout>

    </LinearLayout>
<!-- End of second row layout -->

</LinearLayout>
<!-- End of central layout -->

<!-- Bottom bar -->    
<LinearLayout...>
....
</LinearLayout>

2 个答案:

答案 0 :(得分:0)

您的示例与Android团队在演示中显示的示例非常相似: http://developer.android.com/reference/android/widget/GridLayout.html

我对GridLayout绝不是超级精明(在我开始工作之前有很多试验和错误)但是看看你有什么它应该做的伎俩(特别是如果你将底部的所有按钮移动到顶部) ,并将它们作为ActionBar)。

摆脱layout_weights将改善所有批次,因为每次使用它们都会一次又一次地进行测量。

答案 1 :(得分:-1)

这样做的最佳方法是编写自己的自定义ViewGroup。如果你了解android的布局方式,这是非常简单的。

请参阅Romain Guy的这些幻灯片:

https://docs.google.com/leaf?id=0B_VKZCqEnHblNDdiY2UxODgtYWNhNS00MmU4LWE4NDMtZjQ1OWI5MDMxZTVh&sort=name&layout=list&num=50