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个小时后,我找到了解决办法! SquareCardView
的 onMeasure()
没有调整内部布局边界的大小是一个问题。以下是我将其更改为:
@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)"
祝你好运!
我试图简单地将 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个小时后,我找到了解决办法! SquareCardView
的 onMeasure()
没有调整内部布局边界的大小是一个问题。以下是我将其更改为:
@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)"
祝你好运!