单元格中的Android自定义视图

时间:2017-09-14 14:09:55

标签: android android-recyclerview android-arrayadapter android-custom-view

我的活动中有一个RecyclerView,其中显示了4种不同类型的卡片。其中一张卡片正在显示此库WeekView的日历自定义视图。一切都显示确定,直到我开始滚动我的视图,日历卡开始离开屏幕边界。自定义周视图似乎在工具栏图层上绘制,导致图像中显示上述效果

Before scroll

After scroll

正如您所看到的,cardview滚动正确但自定义周视图位于工具栏图层上方。

在我的Adapter我初始化WeekView

中的ViewHolder
calendarView = (WeekView) itemView.findViewById(R.id.todayView);
if (calendarView != null) {
            initializeCalendarView(calendarView);
        }


private void initializeCalendarView(WeekView mWeekView) {
    mWeekView.setOnEventClickListener(this);
    mWeekView.setMonthChangeListener(this);
    mWeekView.setEventLongPressListener(this);
    mWeekView.setEmptyViewLongPressListener(this);
    setupDateTimeInterpreter(false, mWeekView);
    mWeekView.goToToday();

    mWeekView.setColumnGap((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, context.getResources().getDisplayMetrics()));
    mWeekView.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, context.getResources().getDisplayMetrics()));
    mWeekView.setEventTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, context.getResources().getDisplayMetrics()));
}

这是我xml

CardView
   <android.support.v7.widget.CardView
    android:id="@+id/doctorDashboardCalendar"
    android:layout_width="match_parent"
    android:layout_height="800dp"
    android:layout_margin="@dimen/margin10"
    app:cardCornerRadius="3dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="center_vertical"
            android:gravity="center_vertical"
            android:background="#e0e0e0">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/notes_icon_dark"
                android:layout_margin="10dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="@dimen/text18"
                android:fontFamily="@string/font_name_2"
                android:text="Calendar"/>

        </LinearLayout>

        <*************************.WeekView
            android:id="@+id/todayView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="true"
            app:eventTextColor="@android:color/white"
            app:textSize="12sp"
            app:hourHeight="30dp"
            app:headerColumnPadding="4dp"
            app:headerColumnTextColor="@color/toolbar_text"
            app:headerRowPadding="6dp"
            app:columnGap="4dp"
            app:noOfVisibleDays="1"
            app:headerRowBackgroundColor="@color/toolbar"
            app:dayBackgroundColor="#05000000"
            app:todayBackgroundColor="@color/white"
            app:headerColumnBackground="#ffffffff"
            app:todayHeaderTextColor="@color/accent"
            app:showNowLine="true"
            app:nowLineColor="@color/colorAccent"
            app:enableScrolling="false"/>

    </LinearLayout>

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

2 个答案:

答案 0 :(得分:0)

将其添加到自定义视图中:

android:margin_top="?attr/actionBarSize"

这将使操作栏/工具栏的大小达到顶部,这将使滚动固定为正确的大小。

答案 1 :(得分:0)

我找到了解决方案。如果您在WeekView中对上述格式的代码进行评论,则说明其正常

canvas.clipRect(left, top, width, heigh, Region.Op.REPLACE);