Android CardView 不显示内容

Android CardView Not Displaying Content

我试图简单地将 TextView 放在 CardView 中,但无济于事。我需要做的就是让两个数字出现在两个 CardViews 中。目前,使用下面的代码,出现了两个 CardViews,但不显示其中的任何文本/内容。

我尝试了很多不同的组合,但 none 似乎有效!将 TextView 放在 LinearLayout 中是行不通的,使它成为 CardView 的直接子代也行不通。

这是我当前的代码:

calendar_view.xml

<?xml version="1.0" encoding="utf-8"?>
<hoo.box.facecalendar.SquareCardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    card_view:cardCornerRadius="4dp"
    card_view:cardUseCompatPadding="true"
    android:id="@+id/calendar_view_card"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

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

        <TextView
            android:id="@+id/calendar_view_day"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:singleLine="true"
            android:textColor="@color/primary_text"/>

    </RelativeLayout>

</hoo.box.facecalendar.SquareCardView>

SquareCardView.java

public class SquareCardView extends CardView {
    public SquareCardView(Context context) {
        super(context);
    }

    public SquareCardView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);
        setMeasuredDimension(width, width);
    }
}

CalendarAdapter.java

public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.CalendarViewHolder> {
    private LayoutInflater inflater;
    private Date curDate;
    private List<Date> dateList;

    public CalendarAdapter(Context context) {
        inflater = LayoutInflater.from(context);
        curDate = new Date();
        dateList = new ArrayList<Date>();
    }

    @Override
    public CalendarViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = inflater.inflate(R.layout.calendar_view, viewGroup, false);
        CalendarViewHolder viewHolder = new CalendarViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(CalendarViewHolder calendarViewHolder, int i) {
        if (dateList.size() <= i) {
            Date tempDate = new Date(curDate);
            tempDate.addDays(i + 1);
            dateList.add(i, tempDate);
        }
        Date iDate = dateList.get(i);
        calendarViewHolder.TEXTVIEW.setText(Integer.toString(iDate.day));
    }

    @Override
    public int getItemCount() { return dateList.size() + 1; }

    class CalendarViewHolder extends RecyclerView.ViewHolder {
        public final TextView TEXTVIEW;
        public final SquareCardView CARDVIEW;

        public CalendarViewHolder(View itemView) {
            super(itemView);

            TEXTVIEW = (TextView) itemView.findViewById(R.id.calendar_view_day);
            CARDVIEW = (SquareCardView) itemView.findViewById(R.id.calendar_view_card);
        }
    }
}

在此先感谢任何能帮助我的人!这几天一直困扰着我!

玩了大约3个小时后,我找到了解决办法! SquareCardViewonMeasure() 没有调整内部布局边界的大小是一个问题。以下是我将其更改为:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}

您用于 cardview 的支持库有问题。编译后的sdk版本和support lib版本要一致

例如: 在build.gradle

如果compileSdkVersion 23那么

在依赖项中你应该使用

编译'com.android.support:cardview-v7:23.0.0'

检查 build.gradle 中的两个版本。

ps: 如果你使用支持 lib 版本 24 工作室建议你如下

"this support library should not use a different version (24) than the compilesdkversion (23)"

祝你好运!