如何使用权重重新排列线性布局?

时间:2014-02-03 22:56:54

标签: android android-layout android-listview android-fragments android-linearlayout

我目前使用的线性布局结构如下所示: enter image description here

关联的xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshLoadMoreScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/altercolor2"
    android:layout_gravity="top">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:baselineAligned="true">

        <LinearLayout
            android:id="@+id/columnOne"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_weight=".53"
             android:orientation="vertical">

            <include
               android:id="@+id/first_header"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               layout="@layout/item_header" />

           <LinearLayout
               android:id="@+id/first_container"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:orientation="vertical" />
        </LinearLayout>

        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:layout_weight=".47"
          android:orientation="vertical">

            <include
                 android:id="@+id/second_header"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 layout="@layout/item_header" />

            <LinearLayout
               android:id="@+id/second_container"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:orientation="vertical"
               android:gravity="top" />

            <include
                android:id="@+id/third_header"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                layout="@layout/item_header" />

            <LinearLayout
                android:id="@+id/third_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" />

        </LinearLayout>
    </LinearLayout>
</com.handmark.pulltorefresh.library.PullToRefreshLoadMoreScrollView>

但是,我想重新排列它,看起来像: enter image description here

有没有办法可以使用linearlayout重新排列相同的内容?或者我必须使用其他形式的布局,如relativelayout。我对此非常困惑。另外,想要在容器中包含标题(包含代码),有没有办法轻松实现这个目标?

谢谢!

稍微修改一下代码后,我将第二个标题和第二个布局移到顶部有一点成功,但是第一个标题位于第一个布局旁边而不是顶部,而第三个标题位于第三个。有一种方法可以修复它?我在这里附上了图片: enter image description here

,代码如下:

<com.handmark.pulltorefresh.library.PullToRefreshLoadMoreScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/altercolor2"
    android:layout_gravity="top">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:baselineAligned="true">

        <LinearLayout
            android:id="@+id/columnOne"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical">

            <include
               android:id="@+id/second_header"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               layout="@layout/item_header" />

           <LinearLayout
               android:id="@+id/second_container"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:orientation="vertical" />
        </LinearLayout>

        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal"
          android:baselineAligned="true">

            <include
                 android:id="@+id/first_header"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_weight="0.50"
                 layout="@layout/item_dashboard_header" />

            <LinearLayout
               android:id="@+id/first_container"
               android:layout_width="match_parent"
               android:layout_weight="0.50"
               android:layout_height="wrap_content"
               android:orientation="vertical"
               />

            <include
                android:id="@+id/third_header"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.50"
                layout="@layout/item_dashboard_header" />

            <LinearLayout
                android:id="@+id/third_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.50"
                android:orientation="vertical" />

        </LinearLayout>
    </LinearLayout>
</com.handmark.pulltorefresh.library.PullToRefreshLoadMoreScrollView>

2 个答案:

答案 0 :(得分:1)

这样的事情可以让你接近你想要的东西。对两个weight使用相同数量的View来占用相等的空间。这显然是layout的伪代码,因为你似乎知道属性。

<LinearLayout
    android:orientation="vertical"
    ...>
    <SecondView
        width="match_parent"
        height="wrap_content"
        .../>
    <LinearLayout
       width="match_parent"
       height="wrap_content"
       ...>
      <LinearLayout
          width="0dp"
          height="wrap_content"
          layout_weight="1"
          orientation="vertical">
       <include
             android:id="@+id/first_header"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_weight="0.50"
             layout="@layout/item_dashboard_header" />

        <LinearLayout
           android:id="@+id/first_container"
           android:layout_width="match_parent"
           android:layout_weight="0.50"
           android:layout_height="wrap_content"
           android:orientation="vertical"
           />
     </LinearLayout>
      <LinearLayout
          width="0dp"
          height="wrap_content"
          layout_weight="1"
          orientation="vertical">
       <include
            android:id="@+id/third_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.50"
            layout="@layout/item_dashboard_header" />

        <LinearLayout
            android:id="@+id/third_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.50"
            android:orientation="vertical" />
      </LinearLayout>
     </LinearLayout>
</LinearLayout>

当您在水平weight中使用LinearLayout时,width应为“0dp”而在纵向LinearLayoutheight应为“0dp” 。

现在包装这些

<include
             android:id="@+id/first_header"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_weight="0.50"
             layout="@layout/item_dashboard_header" />

        <LinearLayout
           android:id="@+id/first_container"
           android:layout_width="match_parent"
           android:layout_weight="0.50"
           android:layout_height="wrap_content"
           android:orientation="vertical"
           />

在纵横LinearLayout中,正如我上面的ThirdViewFirstView一样。无论你需要什么顺序。

答案 1 :(得分:0)

使用RelativeLayout,这非常简单 -

只需使用Android:Layout_AlignToRightOf="@id/LeftView"Android:Layout_AlignBelow="@id/TopView"各种观点。

即:你的第二张照片的xmxl应为:

     <RelativeLayout
      android:id="@+id/Organize"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">

             <LinearLayout   //or Whatever type of view you want
             android:id="@+id/Second"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content">
                         <include.../>
             </LinearLayout>

                     <LinearLayout  //or Whatever type of view you want
                     android:id="@+id/First"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_below="@id/Second">
                             <include.../>
                     </LinearLayout>

                     <LinearLayout  //or Whatever type of view you want
                     android:id="@+id/Third"
                     androidlayout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_below="@id/Second"
                     android:layout_ToRightOf="@id/First>
                              <include.../>
                     </LinearLayout>

    </RelativeLayout>

在您的第一张图片和原始MXML中,您创建了一个LinearLayout并将其设置为horizontal(从左到右),然后再添加一个LinearLayout(到它的权利。在第二个内部,你已经填充了两个项目,从上到下分布。使用RelativeLayout是个人偏好,但它可以控制你想让事物在屏幕上显示的位置更加直接。