1

我正在尝试通过扁平化视图层次结构来优化 Android 应用程序中的布局。这里有一个特别难的!

一个非常低效的布局

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

不用说,这种布局效率非常低,在绘制时会导致很多“Choreographer has skipped frames”的消息。我想消除这些嵌套的布局,但 AFAIK 的 RelativeLayout 无助于水平等间距排列的项目,以及垂直居中的两行。另外,我考虑将 ImageView 和 TextView 替换为复合可绘制对象,但我不知道如何控制可绘制对象的大小。

任何帮助表示赞赏!

编辑:这是布局的粗略描述。

<!-- 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>

4

2 回答 2

0

您的示例看起来很像 Android 团队在此处提供的演示中显示的示例:http: //developer.android.com/reference/android/widget/GridLayout.html

我对 GridLayout 绝不是超级精通(在我让它工作之前进行了大量的试验和错误),但看看你拥有的东西应该可以解决问题(尤其是如果你将底部的所有按钮移动到顶部,并且有它们作为一个动作栏)。

摆脱 layout_weights 将改善一切,因为每次使用它们时都会一次又一次地测量它们。

于 2013-05-17T20:00:58.193 回答
-1

这样做的最佳方式是编写您自己的 custom ViewGroup。如果您了解 android 的布局方式,这将非常简单。

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

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

于 2013-01-07T14:13:44.157 回答