我正在尝试通过展平视图层次结构来优化Android应用中的布局。这是一个特别困难的人!
此布局有一个主要的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>
答案 0 :(得分:0)
您的示例与Android团队在演示中显示的示例非常相似: http://developer.android.com/reference/android/widget/GridLayout.html
我对GridLayout绝不是超级精明(在我开始工作之前有很多试验和错误)但是看看你有什么它应该做的伎俩(特别是如果你将底部的所有按钮移动到顶部) ,并将它们作为ActionBar)。
摆脱layout_weights将改善所有批次,因为每次使用它们都会一次又一次地进行测量。
答案 1 :(得分:-1)
这样做的最佳方法是编写自己的自定义ViewGroup
。如果你了解android的布局方式,这是非常简单的。
请参阅Romain Guy的这些幻灯片: