对齐LinearLayout内部的元素占用半屏空间

时间:2016-04-05 17:34:24

标签: android android-layout

我在线性布局中有四个元素。

我希望以classALabel& classBLabel并排排列,并排放在屏幕的半个半宽处。

classA& classB也在屏幕的两半宽度旁边并排排列,但是classALabel& classBLabel

以下是我到目前为止所尝试的内容,但这并不是我想要的。它只是并排显示所有四个元素,每个屏幕空间占25%。

<LinearLayout
    android:id="@+id/ClassALayout"
    android:layout_width="match_parent"
    android:layout_height="@dimen/tile_height"
    android:layout_below="@+id/ClassLayout"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/classALabel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/classALabel" />

    <TextView
        android:id="@+id/classA"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/classALabel"
        android:layout_marginTop="@dimen/dimen_2"
        android:layout_alignParentLeft="true"
        android:layout_weight="1"
/>

    <TextView
        android:id="@+id/classBLabel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/classA"
        android:layout_weight="1"
        android:text="@string/classBLabel" />

    <TextView
        android:id="@+id/classB"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/classBLabel"
        android:layout_marginTop="@dimen/dimen_2"
        android:layout_weight="1"
 />
</LinearLayout>

4 个答案:

答案 0 :(得分:2)

我认为最适合您的解决方案是

<TableLayout
android:id="@+id/ClassALayout"
android:layout_width="match_parent"
android:layout_height="@dimen/tile_height"
android:layout_below="@+id/ClassLayout"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
>
<TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

<TextView
    android:id="@+id/classALabel"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="@string/classALabel" />

<TextView
    android:id="@+id/classA"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/dimen_2"
    android:layout_weight="1"
    />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<TextView
    android:id="@+id/classBLabel"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="@string/classBLabel" />

<TextView
    android:id="@+id/classB"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/dimen_2"
    android:layout_weight="1"
    />
</TableRow>

或者如果你真的想使用LinearLayout,你需要使用LinearLayoutandroid:orientation="vertical"android:orientation="horizontal"的2个子线性布局,但请记住,孩子越多你有相对大小的布局(意味着使用android:layout_weight)对系统的负担越多。

或者您可以使用相对布局,但不能使用android:layout_weight

答案 1 :(得分:1)

这是因为您只创建了一个水平方向的LinearLayout。您将放在此布局中的所有视图都将位于同一行中。

您所要做的就是创建父布局,它可以是线性布局,垂直方向,然后在此布局内部创建2个单独的线性布局,水平方向,并在每个布局中放置2个文本视图。

答案 2 :(得分:1)

这种情况正在发生,因为您已将所有视图放入具有水平方向的单个线性布局中。由于有4个视图,权重= 1,因此屏幕分为4个相等的部分。

以下代码可帮助您实现所需目标。

ClassALayout线性布局是父布局,它进一步包含两个子线性布局 - LabelContainer线性布局和ClassContainer线性布局。 ClassContainer布局位于LabelContainer布局下方,因为父布局具有垂直方向。两个子布局包含2个textview。 标签文本视图位于类文本视图上方,所有这些文本视图占据了屏幕空间的50%。

<LinearLayout                  
android:id="@+id/ClassALayout"
android:layout_width="match_parent"
android:layout_height="@dimen/tile_height"
android:layout_below="@+id/ClassLayout"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:orientation="vertical">

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

<TextView
    android:id="@+id/classALabel"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="@string/classALabel" />

<TextView
    android:id="@+id/classBLabel"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="@string/classBLabel" />


</LinearLayout>

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

<TextView
    android:id="@+id/classA"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/dimen_2"
    android:layout_weight="1"/>

<TextView
    android:id="@+id/classB"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/dimen_2"
    android:layout_weight="1"/>

</LinearLayout>
</LinearLayout>

答案 3 :(得分:0)

它是一个快速而肮脏的解决方案,但它会给你你想要的东西:

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

    <LinearLayout
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </LinearLayout>

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

        <TextView
            android:id="@+id/classALabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="classALabel" />

        <TextView
            android:id="@+id/classBLabel"
            android:layout_width="match_parent"
            android:layout_weight="0.5"
            android:layout_height="wrap_content"
            android:text="ClassBLabel" />
    </LinearLayout>
</LinearLayout>

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

    <LinearLayout
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </LinearLayout>

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

        <TextView
            android:id="@+id/classA"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="ClassA"
            android:layout_weight="1"
            />

        <TextView
            android:id="@+id/classB"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="1"
            android:text="ClassB"
            />

    </LinearLayout>

</LinearLayout>

这是输出:

enter image description here

ScreenSize的一半。