Если я включу RecyclerView
в свои макеты с атрибутом tools:listitem
, я получу правильный предварительный просмотр в Android Studio.
Как только я включаю производное RecyclerView
(пример ниже), я больше не получаю предварительный просмотр.
Я попытался отключить весь пользовательский код, чтобы пользовательская реализация просто выполняла роль оболочки для RecyclerView
из библиотеки поддержки, и даже в этом случае предварительный просмотр недоступен.
Есть ли способ заставить предварительный просмотр работать для этой пользовательской RecyclerView
реализации?
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import com.sandbox.myapp.R;
/**
* Custom implementation of the {@link RecyclerView}, which allows us to change the scrollbar
* color at runtime.
*/
public final class CustomRecyclerView extends RecyclerView {
private int scrollBarColor;
public CustomRecyclerView(Context context) {
super(context);
scrollBarColor = ContextCompat.getColor(context, R.color.blue);
}
public CustomRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
scrollBarColor = ContextCompat.getColor(context, R.color.blue);
}
public CustomRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
scrollBarColor = ContextCompat.getColor(context, R.color.blue);
}
public void setScrollBarColor(@ColorInt int scrollBarColor) {
this.scrollBarColor = scrollBarColor;
}
/**
* Called by Android {@link android.view.View#onDrawScrollBars(Canvas)}
*/
@SuppressWarnings("unused")
protected void onDrawHorizontalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) {
scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP);
scrollBar.setBounds(l, t, r, b);
scrollBar.draw(canvas);
}
/**
* Called by Android {@link android.view.View#onDrawScrollBars(Canvas)}
*/
@SuppressWarnings("unused")
protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) {
scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP);
scrollBar.setBounds(l, t, r, b);
scrollBar.draw(canvas);
}
}
Файл макета активности:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/dark_grey"
android:orientation="vertical">
<include layout="@layout/layout_top_bar" />
<com.sandbox.myapp.custom.views.CustomNestedScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/ok_button"
android:layout_below="@id/top_bar"
android:layout_margin="@dimen/question_margin"
android:scrollbars="vertical">
<RelativeLayout
android:id="@+id/scrollViewContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/question"/>
<com.sandbox.myapp.custom.views.CustomRecyclerView
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recyclerView"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/questionTextView"
tools:itemCount="5"
tools:listitem="@layout/row_hyperlink"/>
<include layout="@layout/question_error"
android:layout_below="@id/recyclerView"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</RelativeLayout>
</com.sandbox.myapp.custom.views.CustomNestedScrollView>
<include layout="@layout/ok_button"/>
</RelativeLayout>
Макет элемента Recyclerview:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/view_distance"
android:layout_marginTop="@dimen/view_distance"
android:gravity="center_vertical">
<ImageView
android:id="@+id/shareIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:background="@drawable/url_browser" />
<com.sandbox.myapp.custom.views.CustomTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@id/shareIcon"
android:textColor="@color/defaultTheme"
android:text="Hyperlink"/>
</RelativeLayout>