5.x | Utils

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 :eyeglasses:

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 :eyeglasses:

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 :+1:
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);
}
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.