嵌套布局很容易使用,为什么要使用另一个?

时间:2015-02-05 15:19:19

标签: android nested android-linearlayout relativelayout

每次我使用嵌套布局时,我的甜蜜ide会显示错误,说“嵌套布局是糟糕的性能”。所以我挖了一些为什么它,并发现它是指数计算的东西等。一般建议相对布局使用线性布局。但是假设下面的代码;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:background="#cccccc"
android:layout_height="match_parent" android:orientation="vertical"
tools:context=".MainActivity" android:weightSum="10">

<LinearLayout android:layout_marginTop="9dp" android:layout_marginLeft="10dp"
    android:background="@drawable/sub_background_dashboard" android:layout_marginRight="10dp"
    android:layout_marginBottom="3dp"
    android:layout_width="match_parent" android:layout_weight="4"
    android:layout_height="0dp">
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"  android:weightSum="2"
     android:layout_weight="2.3"
    android:layout_height="0dp" android:layout_marginTop="5dp"
    android:layout_marginLeft="10dp"
     android:layout_marginRight="10dp" android:layout_marginBottom="2dp">
    <LinearLayout
        android:layout_width="0dp"   android:background="@drawable/sub_background_dashboard"
        android:layout_weight="1" android:layout_marginRight="3.5dp"
        android:layout_height="match_parent" >


    </LinearLayout>
    <LinearLayout
        android:layout_width="0dp"  android:background="@drawable/sub_background_dashboard"
        android:layout_weight="1" android:layout_marginLeft="3.5dp"
        android:layout_height="match_parent" >


    </LinearLayout>

</LinearLayout>

<LinearLayout android:layout_marginTop="5dp" android:layout_marginLeft="10dp"
    android:background="@drawable/sub_background_dashboard" android:layout_marginRight="10dp"
    android:layout_marginBottom="3dp"
    android:layout_width="match_parent" android:layout_weight="2.7"
    android:layout_height="0dp">


</LinearLayout>


<LinearLayout
    android:layout_width="match_parent"  android:weightSum="10"
    android:layout_weight="1"
    android:layout_height="0dp"   android:layout_marginTop="3dp"
     android:orientation="vertical" >

    <LinearLayout
         android:layout_width="match_parent"  android:weightSum="3"
         android:layout_weight="9" android:background="#77000000"
         android:layout_height="0dp"
         android:orientation="horizontal">

    <Button
        android:layout_width="0dp" android:layout_weight="1" android:textColor="#DDDDDDDD"
        android:layout_height="match_parent" android:background="#00000000"
        android:gravity="center"  android:textSize="17sp"
        android:text="Snooze"/>

    <View
        android:layout_width="1dp" android:layout_marginTop="5dp"
        android:layout_height="match_parent" android:layout_marginBottom="5dp"
        android:background="#bbbbbbbb"/>

    <Button
        android:layout_width="0dp" android:layout_weight="1"
        android:textSize="17sp" android:background="#00000000"
        android:text="Dismiss" android:gravity="center"
        android:layout_height="match_parent" android:textColor="#DDDDDDDD"/>

    <View
        android:layout_width="1dp" android:layout_marginTop="5dp"
        android:layout_height="match_parent" android:layout_marginBottom="5dp"
        android:background="#bbbbbbbb"/>

    <Button
        android:layout_width="0dp" android:layout_weight="1"
        android:textSize="17sp" android:background="#00000000"
        android:text="Cancel" android:gravity="center"
        android:layout_height="match_parent" android:textColor="#DDDDDDDD"/>

     </LinearLayout>

    <View
        android:layout_width="match_parent" android:background="#ff0000"
        android:layout_height="0dp" android:layout_weight="1"/>
</LinearLayout>

</LinearLayout >

将线性布局视为视图等模板。这行xml代码适用于纵向模式的每个屏幕大小!!!已完成计算,不需要进行百分比计算(以及实施),所有内容都涵盖预期的空间。

如果我使用相对布局,对于水平视图,宽度计算会更长并且可能需要动态方面(我不建议在动态方面做gui 很糟糕,确定它更好甚至)所以即使是这样的小型嵌套布局,还是不明智的吗?

1 个答案:

答案 0 :(得分:0)

我也使用嵌套的线性布局,因为它很容易。但是对于性能,您可以更好地使用GRIDLAYOUT。 Android在冰淇淋三明治中引入它以避免嵌套布局。

一个小例子:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/GridLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="2"
android:rowCount="7"
tools:context=".MainActivity" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_column="0"
    android:layout_row="0"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/textView1"
    android:layout_column="1"
    android:layout_gravity="right"
    android:layout_row="0"
    android:text="TextView" />

<View
    android:id="@+id/view1"
    android:layout_height="16dp"
    android:layout_column="0"
    android:layout_columnSpan="2"
    android:layout_row="1"
    android:background="#F90" />

<Button
    android:id="@+id/button1"
    android:layout_column="0"
    android:layout_row="2"
    android:text="Button1" />

<Button
    android:id="@+id/button2"
    android:layout_column="0"
    android:layout_row="3"
    android:text="Button2" />

<Button
    android:id="@+id/button3"
    android:layout_column="0"
    android:layout_row="4"
    android:text="Button3" />

<View
    android:id="@+id/view2"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_column="0"
    android:layout_gravity="fill_vertical|fill_horizontal"
    android:layout_row="5"
    android:background="#F90" />

<ImageView
    android:id="@+id/imageView2"
    android:layout_column="0"
    android:layout_row="6"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/textView3"
    android:layout_column="1"
    android:layout_gravity="right"
    android:layout_row="2"
    android:text="HEADER" />

<View
    android:id="@+id/view3"
    android:layout_width="0dp"
    android:layout_height="16dp"
    android:layout_column="1"
    android:layout_gravity="bottom|fill_horizontal"
    android:layout_row="6"
    android:background="#F90" />