卡片布局全都揉成一团

时间:2015-10-26 14:41:11

标签: android android-layout android-recyclerview

我正在尝试实施新的RecyclerView和卡布局。这一切都正常工作,除了卡片全部聚集在一起,即没有卡片分开,你只看到最后一个项目上有一个投影,如下面的截图所示。

Screenshot showing issue with card layout

从上面的屏幕截图中可以看出,3个元素之间没有分离,并且最后一个元素上只显示了阴影。

以下是包含回收站视图的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <view
        android:id="@+id/android_recycler_view"
        class="android.support.v7.widget.RecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true" />
</LinearLayout>

以下是卡片布局的布局

<app:android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cardview="http://schemas.android.com/apk/res-auto"
    android:layout_width="400dp"
    android:layout_height="80dp"
    xmlns:app="http://schemas.android.com/tools"
    android:layout_margin="40dp"
    app:cardUseCompatPadding="true"
    app:cardPreventCornerOverlap="false">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:elevation="5dp"
        app:cardUseCompatPadding="true">
        <TextView
            android:id="@+id/txtApplicationName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:maxLines="3"
            android:padding="8dp"
            android:textColor="#222"
            android:textSize="15dp"
            android:layout_centerInParent="true"
            android:clickable="true"
            android:background="?android:selectableItemBackground" />

    </RelativeLayout>
</app:android.support.v7.widget.CardView>

Recycler视图托管在View Pager选项卡视图中,下面是XML的格式,以备不时之需。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.BoardiesITSolution.CritiMonApp.AppsActivity">

    <LinearLayout
        android:id="@+id/viewContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
            <include layout="@layout/toolbar"/>
            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMode="fixed"
                app:tabGravity="fill"/>
        </android.support.design.widget.AppBarLayout>

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
            <!--app:layout_behaviour="@string/appbar_scrolling_view_behaviour" />-->

    </LinearLayout>
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fabRegisterNewApp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:clickable="true"
        app:layout_anchor="@id/viewpager"
        android:src="@drawable/ic_add_white_24dp"
        app:layout_anchorGravity="bottom|right|end" />
</android.support.design.widget.CoordinatorLayout>

下面是我的onCreateViewHolder和onBindViewHolder代码

@Override
    public AppViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.app_card, null);
        AppViewHolder appViewHolder = new AppViewHolder(view);
        return appViewHolder;
    }

    @Override
    public void onBindViewHolder(AppViewHolder holder, int position)
    {
        AppDetails appDetails = appDetailsList.get(position);
        holder.textView.setText(appDetails.getApplicationName());
        holder.textView.setOnClickListener(mCardClickListener);
        holder.textView.setTag(holder);
    }

1 个答案:

答案 0 :(得分:1)

问题在于如何使视图膨胀LayoutInflater.from(parent.getContext()).inflate(R.layout.app_card, null);

您没有在inflate方法中提供父级(您将其设置为null),这将提供要使用的LayoutParams集,因此cardview只会忽略您提供的一些参数。您还应该将boolean attachToRoot设置为false以确保父级仅用于创建LayoutParams的正确子类

LayoutInflater.from(parent.getContext()).inflate(R.layout.app_card, parent, false);

您还可以在docshere

中详细了解相关信息