如何使用cardview正确更新我的布局(基于权重属性)?

时间:2014-10-29 11:58:08

标签: android android-layout android-cardview

我正在使用CardCiew小部件更新我的应用,我已经更新了一些简单的布局。

当我使用带有LinearLayout属性的layout_weight集时,我会得到一个不同的结果。

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:id="@+id/technologie_ll_item">

    <android.support.v7.widget.CardView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_weight="10"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2">

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/iv_logo_technologie"
                    android:layout_width="75dp"
                    android:layout_height="75dp"
                    app:border_width="2dp"
                    app:border_color="#99069d78"
                    android:src="@drawable/after"
                    android:paddingLeft="0dp" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="5"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/tv_nom_technologie"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textSize="17dp"
                    android:textAllCaps="true"
                    android:paddingLeft="10dp"
                    android:gravity="center_vertical"
                    android:text="Orthodontics"/>

            </LinearLayout>

            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="fill_parent"
                android:gravity="right"
                android:orientation="horizontal">

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/indic" />

            </LinearLayout>

        </LinearLayout>

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

</LinearLayout>

结果

enter image description here

1 个答案:

答案 0 :(得分:4)

也许这可以帮到你。

方法1

(请注意,我已使用CircleImageView更改了您的Imageview,因此我可以使其正常运行;)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/technologie_ll_item">

<android.support.v7.widget.CardView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

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

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2">

            <ImageView
                android:id="@+id/iv_logo_technologie"
                android:layout_width="75dp"
                android:layout_height="75dp"
                android:paddingLeft="0dp" />
        </LinearLayout>

        <TextView
            android:id="@+id/tv_nom_technologie"
            android:layout_width="0dp"
            android:layout_weight="7"
            android:layout_height="wrap_content"
            android:textSize="17sp"
            android:textAllCaps="true"
            android:paddingLeft="10dp"
            android:layout_gravity="center_vertical"
            android:text="Orthodontics" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="fill_parent"
            android:gravity="right"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

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

正如您所看到的,您将拥有1 LinearLayout android:weightSum为10(只是为了使比例更好),其中包含3个组件。包含LinearLayout(我的代码中为CircleImageView)的第一个ImageView容器的android:layout_weight为2,文本的android:layout_weight为7 ,箭头容器的android:layout_weight为1。

也许你可以摆脱持有箭头的LinearLayout,并直接在ImageView中设置权重,我认为如果你将箭头应用为android:src它将是重新调整了图像的大小,但我现在不确定。

方法2:

另一个解决方案是RelativeLayout,如下面的代码:

<?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="wrap_content"
    android:orientation="horizontal"
    android:id="@+id/technologie_ll_item">

    <android.support.v7.widget.CardView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

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

            <!-- CircleImageView here -->
            <ImageView
                android:id="@+id/iv_logo_technologie"
                android:layout_width="75dp"
                android:layout_height="75dp"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:paddingLeft="0dp" />

            <!-- Arrow drawable here -->
            <ImageView
                android:id="@+id/arrow"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <!-- Text here, between circle and arrow -->
            <TextView
                android:id="@+id/tv_nom_technologie"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="17sp"
                android:layout_toRightOf="@id/iv_logo_technologie"
                android:layout_toLeftOf="@id/arrow"
                android:textAllCaps="true"
                android:paddingLeft="10dp"
                android:layout_centerVertical="true"
                android:text="Orthodontics" />
        </RelativeLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>

通过这个你删除LinearLayout,你将只有3个组件,可能更好的性能。

希望其中一些能帮助你交配。

问候!