如何在Android中正确对齐事物?

时间:2015-12-23 06:31:48

标签: android xml

我正在尝试布局一个简单的CardView,其中顶部有文字,在其下方,有几个“按钮”。但我似乎无法让布局正确对齐,而且我在过去(不久前,我必须承认)使用layout_above和layout_below完成了它,但它们似乎不再可用了。基于我从文档中学到的东西,我已经尝试了其他一些方法,但我认为我没有学到太多东西......干净利落......

为了更好地解释我的代码尝试做什么,这是一张照片:

CardView with text on the top, a separator and button on the bottom.

我没有看到你在上面的图片中看到的内容,而是看到两个布局重叠,并且按钮出现在两个布局的顶部。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="fill_parent"
    android:layout_height="72dp"
    card_view:cardCornerRadius="0.7dp"
    card_view:cardElevation="1.0dp"
    android:background="@color/cardview_light_background"
    android:layout_marginBottom="7dp"
    android:foreground="?android:attr/selectableItemBackground"
    android:clickable="true">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="fill_horizontal"
        android:background="@color/linearLayoutBackgroundColor">
        <TextView
            android:id="@+id/cardViewTextItem"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cardText"
            android:padding="7dp"/>
    </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="fill_horizontal"
        android:background="@color/secondLinearLayoutBackgroundColor">
        <Button android:text="DETAILS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/cardview_light_background" />
    </RelativeLayout>
</android.support.v7.widget.CardView>

3 个答案:

答案 0 :(得分:1)

layout_above和layout_below仅在RelativeLayout中可用。你的xml应该是这样的:

<android.support.v7.widget.CardView
    /*some attributes*/ >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"/>

        <TextView
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@id/button"/>
    </RelativeLayout>
</android.support.v7.widget.CardView>

答案 1 :(得分:-1)

将所有内容换成linearLayout并删除嵌套的Relativelayout.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
     >
<android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="72dp"
    card_view:cardCornerRadius="0.7dp"
    card_view:cardElevation="1.0dp"
    android:background="@color/cardview_light_background"
    android:layout_marginBottom="7dp"
    android:foreground="?android:attr/selectableItemBackground"
    android:clickable="true">

        <TextView
            android:id="@+id/cardViewTextItem"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cardText"
            android:padding="7dp"/>
          <Button android:text="DETAILS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/cardview_light_background" />

</android.support.v7.widget.CardView>
</LinearLayout>

答案 2 :(得分:-1)

试试这个,很容易

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

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="12dip"
        android:visibility="visible">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:weightSum="2">

            <LinearLayout
                style="@style/Widget.CardContent.TitleBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/textWelCome"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="cardText"
                    android:textSize="20sp" />
            </LinearLayout>

            <LinearLayout
                style="@style/Widget.CardContent.TitleBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/textWelCome2"
                    android:layout_width="150dip"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="175dip"
                    android:layout_marginTop="2dp"
                    android:text="DETAILS"
                    android:textSize="20sp" />

            </LinearLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>