如何保留CardView(由LinearLayout包装)高程,而不使用margin或cardUseCompatPadding?

时间:2016-06-08 08:20:58

标签: android android-layout android-cardview

我有以下xml布局,有两个卡片视图

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.elye.myapplication.MainActivity">

    <include layout="@layout/card_layout"
        android:layout_margin="16dp"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"/>

    <LinearLayout
        android:layout_margin="16dp"
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
        <include layout="@layout/card_layout"/>
    </LinearLayout>

</LinearLayout>

卡片视图就像

一样简单
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_new_search"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    card_view:cardCornerRadius="2dp"
    card_view:cardElevation="10dp">

        <TextView
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:paddingTop="16dp"
            android:paddingBottom="16dp"
            android:text="MY TEXT"
            android:layout_width="wrap_content" />

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

我的图片如下。这不好,因为第二张牌的高度缺失。

enter image description here

因为我想在第二张卡片视图中提升,所以我为我的cardView添加了android:layout_margin="10dp",如下所示。请注意10dp,以便更清楚地看出两个cardview的大小现在都不同了。

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_new_search"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:clickable="true"
    card_view:cardCornerRadius="2dp"
    card_view:cardElevation="10dp">

        <TextView
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:paddingTop="16dp"
            android:paddingBottom="16dp"
            android:text="MY TEXT"
            android:layout_width="wrap_content" />

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

现在视图如下所示。哪个不好。我的第二张卡缩了。

enter image description here

现在我删除android:layout_margin="10dp" card_view:cardUseCompatPadding="true"。而且观点如下。

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_new_search"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardUseCompatPadding="true"
    android:clickable="true"
    card_view:cardCornerRadius="2dp"
    card_view:cardElevation="10dp">

        <TextView
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:paddingTop="16dp"
            android:paddingBottom="16dp"
            android:text="MY TEXT"
            android:layout_width="wrap_content" />

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

现在这两者都有提升,且大小一致。但是它在两张卡片之间存在巨大差距,这对我来说并不好。我希望我的原始差距......根据底部的图片。

enter image description here

理想情况下,我希望看起来像下面的东西,连同第二个cardView仍然是由东西包裹的(在这种情况下是LinearLayout)。保证金和cardUseCompatPadding没有解决我的问题。

所以我的问题是,如何保存CardView(由LinearLayout包装)高程,而不使用margin或cardUseCompatPadding,并且仍然看起来与纯粹仅包含的CardView相同。 (即我图表的第一张卡片视图)

P / S:不要让我删除LinearLayout,因为它用作插图。我出于其他原因需要该包装器(即动态更改其中的视图)

enter image description here

1 个答案:

答案 0 :(得分:1)

试试这个,这对你有帮助。

这是您的第一个代码,我为第二个包含标记添加了宽度和高度。

 <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            tools:context="com.example.elye.myapplication.MainActivity">

            <include
                layout="@layout/card_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="16dp" />

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

                <!--<include-->
                <!--layout="@layout/card_layout"-->
                <!--android:layout_width="match_parent"-->
                <!--android:layout_height="wrap_content"-->
                <!--android:layout_margin="16dp" />-->
            </LinearLayout>

        </LinearLayout>

和cardview布局

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_new_search"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    card_view:cardCornerRadius="2dp"
    card_view:cardElevation="10dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingBottom="16dp"
        android:paddingTop="16dp"
        android:text="MY TEXT" />

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

Activity.java

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer);
        try {
            LinearLayout linearLayout = (LinearLayout)findViewById(R.id.card_layout);
            final LayoutInflater factory = getLayoutInflater();
            View view = factory.inflate(R.layout.card_layout, null);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            int x = (int) getResources().getDimension(R.dimen.margin_16);
            params.setMargins(x, x, x, x);
            view.setLayoutParams(params);
            linearLayout.addView(view);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

在res / values / dimens.xml中添加以下行

 <dimen name="margin_16">16dp</dimen>