Как изменить цвет края прокрутки и пролить свет

Как изменить цвет края сверхпрокрутки и сверхпрокрутки или как изменить белый цвет (цвет по умолчанию) версии 2.5 для Android-версии lollipop?

    Цвет свечения overscroll наследует основное значение цвета, заданное android:colorPrimary в вашем приложении. Но если вам нужно указать другое значение, просто используйте android:colorEdgeEffect .

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

    На LOLLIPOP свечение наследуется от colorPrimary . После создания представления цвет свечения края может быть изменен только через отражение. Это может быть полезно, когда вы динамически загружаете цвета с помощью Palette .

    EDIT: TL; DR: Загрузите весь класс отсюда: https://github.com/consp1racy/android-commons/blob/master/commons/src/main/java/net/xpece/android/widget/XpEdgeEffect.java

    PROGUARD SETUP: Если вы собираетесь использовать это в виджетах из библиотеки поддержки, вам нужно сохранить имена полей. Самый быстрый способ сделать это следующий (хотя все еще расточительный):

     -keepclassmembers class * extends android.view.View { <fields>; } -keepclassmembers class android.support.v4.widget.EdgeEffectCompat { <fields>; } 

    Создайте класс утилиты со следующим кодом:

     private static final Class<?> CLASS_SCROLL_VIEW = ScrollView.class; private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_TOP; private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM; private static final Class<?> CLASS_LIST_VIEW = AbsListView.class; private static final Field LIST_VIEW_FIELD_EDGE_GLOW_TOP; private static final Field LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM; static { Field edgeGlowTop = null, edgeGlowBottom = null; for (Field f : CLASS_SCROLL_VIEW.getDeclaredFields()) { switch (f.getName()) { case "mEdgeGlowTop": f.setAccessible(true); edgeGlowTop = f; break; case "mEdgeGlowBottom": f.setAccessible(true); edgeGlowBottom = f; break; } } SCROLL_VIEW_FIELD_EDGE_GLOW_TOP = edgeGlowTop; SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM = edgeGlowBottom; for (Field f : CLASS_LIST_VIEW.getDeclaredFields()) { switch (f.getName()) { case "mEdgeGlowTop": f.setAccessible(true); edgeGlowTop = f; break; case "mEdgeGlowBottom": f.setAccessible(true); edgeGlowBottom = f; break; } } LIST_VIEW_FIELD_EDGE_GLOW_TOP = edgeGlowTop; LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM = edgeGlowBottom; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static void setEdgeGlowColor(AbsListView listView, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { EdgeEffect ee; ee = (EdgeEffect) LIST_VIEW_FIELD_EDGE_GLOW_TOP.get(listView); ee.setColor(color); ee = (EdgeEffect) LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(listView); ee.setColor(color); } catch (Exception ex) { ex.printStackTrace(); } } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static void setEdgeGlowColor(ScrollView scrollView, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { EdgeEffect ee; ee = (EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_TOP.get(scrollView); ee.setColor(color); ee = (EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(scrollView); ee.setColor(color); } catch (Exception ex) { ex.printStackTrace(); } } }