Search code examples
androidscrollviewandroid-5.0-lollipop

How to add a scrollview edge color effect in Android Lollipop?


In my app I change the overscroll glow effect color like this:

int glowDrawableId = contexto.getResources().getIdentifier("overscroll_glow", "drawable", "android");
Drawable androidGlow = contexto.getResources().getDrawable(glowDrawableId);
assert androidGlow != null;
androidGlow.setColorFilter(getResources().getColor(R.color.MyColor), PorterDuff.Mode.SRC_ATOP);

But when i updated to lollipop this code crashes. I get following error code:

FATAL EXCEPTION: main
Process: com.myproject.myapp, PID: 954
android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.Resources.getValue(Resources.java:1233)
at android.content.res.Resources.getDrawable(Resources.java:756)
at android.content.res.Resources.getDrawable(Resources.java:724)

Seems that overscroll_glow resource is missing in lollipop.

How can I achieve this?


Solution

  • You can specify android:colorEdgeEffect in your theme to change the overscroll glow color within your entire app. By default, this inherits the primary color value set by android:colorPrimary.

    res/values/themes.xml:

    <style name="MyAppTheme" parent="...">
        ...
        <item name="android:colorEdgeEffect">@color/my_color</item>
    </style>
    

    Alternatively, you can modify this value for a single view using an inline theme overlay.

    res/values/themes.xml:

    <!-- Note that there is no parent style or additional attributes specified. -->
    <style name="MyEdgeOverlayTheme">
        <item name="android:colorEdgeEffect">@color/my_color</item>
    </style>
    

    res/layout/my_layout.xml:

    <ListView
        ...
        android:theme="@style/MyEdgeOverlayTheme" />