Skip to content
Davide Steduto edited this page May 1, 2018 · 18 revisions

In this page


LayoutUtils

Inside the main library, has static methods to identify RecyclerView orientation, span count and visible items positions.
Direct link LayoutUtils.java

Class location

eu.davidea.flexibleadapter.utils
  |_ LayoutUtils

FlexibleUtils

This class has static methods to handle Accent color and Spannable text as well as latest API versions.
Direct link FlexibleUtils.java

Class location 👓

eu.davidea.flexibleadapter.utils
  |_ FlexibleUtils

Class JavaDoc

/*----------------------------*/
/* TEXT COLOR UTILITY METHODS */
/*----------------------------*/

/**
 * Sets a spannable text with the accent color (if available) into the provided TextView.
 * Multiple matches will be highlighted, but if the 2nd match is consecutive,
 * the highlight is skipped.
 * Internally calls fetchAccentColor(Context, int).
 */
public static void highlightText(@NonNull TextView textView,
                                 @Nullable String originalText,
                                 @Nullable String constraint);

/**
 * Same as before but with custom color.
 */
public static void highlightText(@NonNull TextView textView,
                                 @Nullable String originalText,
                                 @Nullable String constraint, @ColorInt int color);

/*------------------------------*/
/* ACCENT COLOR UTILITY METHODS */
/*------------------------------*/

/**
 * Reset the internal accent color to #INVALID_COLOR, to give the possibility
 * to re-fetch it at runtime, since once it is fetched it cannot be changed.
 */
public static void resetAccentColor();

/**
 * Optimized method to fetch the accent color on devices with at least Lollipop.
 * If accent color has been already fetched it is simply returned.
 */
public static int fetchAccentColor(Context context, @ColorInt int defColor);

/*-------------------------------*/
/* RECYCLER-VIEW UTILITY METHODS */
/*-------------------------------*/

/**
 * Finds the layout orientation of the RecyclerView,
 * no matter which LayoutManager is in use.
 */
public static int getOrientation(RecyclerView recyclerView);

/**
 * Helper method to retrieve the number of the columns (span count)
 * of the given LayoutManager. All Layouts are supported.
 */
public static int getSpanCount(RecyclerView recyclerView);

/**
 * Helper methods to find visible item positions.
 * All Layouts are supported.
 */
public static int findFirstCompletelyVisibleItemPosition(RecyclerView recyclerView);
public static int findLastCompletelyVisibleItemPosition(RecyclerView recyclerView);
public static int findFirstVisibleItemPosition(RecyclerView recyclerView);
public static int findLastVisibleItemPosition(RecyclerView recyclerView);

highlightText usage

To use as following in the bindViewHolder():

@Override
public void bindViewHolder(final FlexibleAdapter adapter, ParentViewHolder holder,
                           int position, List payloads) {
    ...
    // In case of searchText matches with Title or with subTitle fields
    // this will be highlighted
    if (adapter.hasSearchText()) {
        FlexibleUtils.highlightText(
                      holder.mTitle, getTitle(), getSearchText());
        FlexibleUtils.highlightText(
                      holder.mSubtitle, getSubtitle(), getSearchText());
    } else {
        holder.mTitle.setText(getTitle());
        holder.mSubtitle.setText(getSubtitle());
    }
    ...
}

DrawableUtils

This class has static methods to handle the Background color with ripple at runtime.
Direct link DrawableUtils.java

Class location 👓

eu.davidea.flexibleadapter.utils
  |_ DrawableUtils

Class JavaDoc

/**
 * Helper methods to set the background depending on the android version.
 */
public static void setBackgroundCompat(View view, Drawable drawable);
public static void setBackgroundCompat(View view, @DrawableRes int drawableRes);

/**
 * Helper method to extract the drawable by its resource depending
 * on the android version.
 */
public static Drawable getDrawableCompat(Context context, @DrawableRes int drawableRes);

/**
 * Helper to get the default selectableItemBackground drawable of the
 * R.attr.selectableItemBackground attribute of the overridden style.
 */
public static Drawable getSelectableItemBackground(Context context);

/**
 * Helper to get the system default Color Control Highlight. Returns the color
 * of the R.attr.colorControlHighlight attribute in the overridden style.
 */
@ColorInt
public static int getColorControlHighlight(Context context);

/**
 * Helper to get a custom selectable background with Ripple if device has at
 * least Lollipop.
 */
public static Drawable getSelectableBackgroundCompat(@ColorInt int normalColor,
                                                     @ColorInt int pressedColor,
                                                     @ColorInt int rippleColor);

/**
 * Adds a ripple effect to any background.
 */
public static Drawable getRippleDrawable(Drawable drawable, @ColorInt int rippleColor);

/**
 * Generate the ColorDrawable object from the provided Color.
 */
public static ColorDrawable getColorDrawable(@ColorInt int color);

Usage

With only 1 statement, we avoid the configuration of the XML 👍
To use as following in the bindViewHolder():

@Override
public void bindViewHolder(final FlexibleAdapter adapter, final ViewHolder holder,
                           int position, List payloads) {
    Context context = holder.itemView.getContext();
    ...
    Drawable drawable = DrawableUtils.getSelectableBackgroundCompat(
                    Color.WHITE, Color.parseColor("#dddddd"), // Same color of divider
                    DrawableUtils.getColorControlHighlight(context));
    DrawableUtils.setBackgroundCompat(holder.itemView, drawable);

    // OR
    Drawable drawable = DrawableUtils.getSelectableBackgroundCompat(
                    status.getColor(),             // normal background
                    Utils.getColorAccent(context), // pressed background
                    Color.WHITE));                 // ripple color
    DrawableUtils.setBackgroundCompat(holder.itemView, drawable);
}
Clone this wiki locally