使用RelativeLayout均匀分割布局

时间:2014-10-30 06:12:49

标签: android android-layout listview android-listview

我有一个Listview,每个listview项看起来像这样!enter image description here

ListViewItem是RelativeLayout。现在我在创建两个分屏按钮时遇到问题。目前我这样做。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout 
        android:layout_height="fill_parent" android:layout_width="fill_parent"
        android:layout_below="@+id/ReviewText">

    <RelativeLayout
        android:layout_weight="1"
        android:layout_height="fill_parent" android:layout_width="0dp"
        android:onClick="likeClicked"
        android:clickable="true" >
        <!-- SOME CODE -->
    </RelativeLayout>

    <RelativeLayout
        android:layout_weight="1"
        android:layout_height="fill_parent" android:layout_width="0dp"
        android:onClick="likeClicked"
        android:clickable="true" >
        <!-- SOME CODE -->
    </RelativeLayout>

    </LinearLayout>

<RelativeLayout>

这完全没问题,但android dev documentation here说明了

  

此外,嵌套使用的LinearLayout的几个实例   layout_weight参数可以作为每个孩子特别昂贵   需要测量两次。这一点尤为重要   布局重复膨胀,例如在ListView或中使用时   GridView的。

我可以改进我的代码以提高性能。如果是,怎么样?有没有其他方法可以在不使用LinearLayout的情况下均匀分割两个按钮?

4 个答案:

答案 0 :(得分:7)

为了最小化布局嵌套,所以要优化性能,我会写一个布局(它确实利用了布局的相对性)像这样:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <View
        android:id="@+id/dummy"
        android:layout_width="1dp"
        android:layout_height="1dp"
        android:layout_centerHorizontal="true"
        android:visibility="invisible"
    />
    <Button
        android:id="@+id/btnLeft"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_toLeftOf="@id/dummy"
        android:onClick="likeClicked"
        android:clickable="true"
    />
    <Button
        android:id="@+id/btnRite"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_toRightOf="@id/dummy"
        android:onClick="likeClicked"
        android:clickable="true"
    />
<RelativeLayout>

我放了一个与中心对齐的虚拟视图,然后是2个按钮,我将它对齐到它的左侧和右侧。

答案 1 :(得分:1)

对于像您的LinearLayout这样的简单布局是完美的选择。唯一需要警惕的是将布局权重嵌套在父级已经分配了布局权重的视图中。这是完全可以的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

虽然不是这样:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" > <!-- nesting this way is bad for performance -->
            android:text="Button" />

            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Button" />
        </Button>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <!-- this is ok -->

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />
    </LinearLayout>
</LinearLayout>

答案 2 :(得分:0)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" 
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

<place top item layout here>   

<LinearLayout 
    android:layout_height="fill_parent" android:layout_width="fill_parent"
     android:orientation="horizontal" 
       android:weightSum="2">

<RelativeLayout
    android:layout_height="fill_parent" android:layout_width="0dp"
    android:onClick="likeClicked"
    android:clickable="true" 
     android:layout_weight="1"
    >
    <!-- SOME CODE -->
</RelativeLayout>

<RelativeLayout
    android:layout_weight="1"
    android:layout_height="fill_parent" android:layout_width="0dp"
    android:onClick="likeClicked"
    android:clickable="true" >
    <!-- SOME CODE -->
</RelativeLayout>

</LinearLayout>

 </LinearLayout>

答案 3 :(得分:0)

希望,如果按照列出的要点

,可以提高效果
  1. 当您需要动态时,首先不要使用太多的XML代码
  2. 而不是在XML中创建2个相对布局,创建一个扩展线性布局/相对布局
  3. 的类
  4. 将要在列表项中显示的视图添加到上述布局
  5. 使用同一类别测量高度和宽度动态
  6. 并确保布局是参数化的,您可以动态传递内容
  7. 最后,您可以使用适配器的getview方法**
  8. 来扩充已创建的视图

    请参阅以下链接

    Dynamic listview content loader