Android:哪种布局?

时间:2014-07-01 02:00:14

标签: android layout android-linearlayout grid-layout

我想创建一个ListView行,如下所示:

aaaa bbbb ............. c d e
aaaa bbbb ............. c d e
aaaa bbbb ............. c d e

其中: aaaa& bbbb是固定大小的列 ....是一个可变大小的文本字符串 c,d& e是每个30x30像素的图像

这是最适合使用的布局?我想要的是....文本字符串用尽所有剩余空间但所有其他列保持固定宽度。

我尝试使用LinearLayout但是无法将c,d和e对齐,除非我为......指定了特定的大小......但我不想为....指定特定的大小。 ..

GridLayout几乎完成了这个技巧,但它看起来像这样:

aaaa bbbb ............. c d          e
aaaa bbbb ............. c d          e
aaaa bbbb ............. c d          e

这是我的GridLayout XML,但我不承诺使用GridLayout。我还想避免在运行时设置列宽,如果可能的话。

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="6"

    android:orientation="horizontal" >

    <TextView
        android:id="@+id/lv_artist"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:text="Artist"
        android:textColor="#000" />

    <TextView
        android:id="@+id/lv_album"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="Album"
        android:textColor="#000" />

    <TextView
        android:id="@+id/lv_tune"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="Tune"
        android:textColor="#000" />

    <ImageView
        android:id="@+id/ibAddPlaylist"
        android:gravity="right"
        android:layout_gravity="right"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/clipboard30x30grey" />

    <ImageView
        android:id="@+id/ibLikeHate"
        android:gravity="right"
        android:layout_gravity="right"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/unchecked" />

    <ImageView
        android:id="@+id/ivPlay"
        android:gravity="right"
        android:layout_gravity="right"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/play_30x30" />    
</GridLayout>

2 个答案:

答案 0 :(得分:4)

layout_gravitylayout_weight可以解决问题,请参阅LinearLayout上的Android GuideReference

以下代码应该有效:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/lv_artist"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:text="Artist"
        android:textColor="#000" />

    <TextView
        android:id="@+id/lv_album"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="Album"
        android:textColor="#000" />

    <!--
      ~ Use android:layout_weight so that this view will take up all the space
      ~ remaining when no other view has specifed its weight.
     -->
    <TextView
        android:id="@+id/lv_tune"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginLeft="10dp"
        android:text="Tune"
        android:textColor="#000" />

    <!-- 
      ~ android:gravity is for the gravity in the View itself, while
      ~ android:layout_gravity is for the gravity of the View in it's
      ~ ViewGroup(container), in this case it may not be what you intended to
      ~ do, so I removed it for you.
     -->
    <ImageView
        android:id="@+id/ibAddPlaylist"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="right"
        android:src="@drawable/clipboard30x30grey" />

    <ImageView
        android:id="@+id/ibLikeHate"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="right"
        android:src="@drawable/unchecked" />

    <ImageView
        android:id="@+id/ivPlay"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="right"
        android:src="@drawable/play_30x30" />    
</LinearLayout>

答案 1 :(得分:0)

您是否尝试在LinearLayout上使用android:weightSum,在其子android:layout_weight上使用Views