Как изменить цвет края сверхпрокрутки и сверхпрокрутки или как изменить белый цвет (цвет по умолчанию) версии android release lollipop?Как изменить цвет края прокрутки и затухания прокрутки
ответ
Цвет свечения прокрутки наследует основное значение цвета, заданное android:colorPrimary
во всем приложении. Но если вам нужно указать другое значение, просто используйте android:colorEdgeEffect
.
<style name="MyAppTheme" parent="***">
<item name="android:colorEdgeEffect">@color/my_color</item>
</style>
Этот атрибут доступен только для API 21 и выше. – fractalwrench
Да вот в чем вопрос. –
Обратите внимание, что 'android: colorPrimary' также устанавливает цвет вашего ActionBar или панели инструментов. В то время как 'android: colorEdgeEffect' более специфичен и применим только к ListViews, RecyclerViews и т. Д. –
На 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();
}
}
}
Ницца! Я искал способ изменения цвета свечения программно, и каждый ответ был связан с настройкой стиля на xml. Твоя работала для меня без проблем, и теперь я могу изменить цвет динамически в зависимости от контекста, как я делаю для statusbarcolor и панели инструментов. Благодаря! – MrBrightside
спасибо. он работает хорошо. но как насчет 'RecyclerView'? – sajad
@sajad Вот класс, который я использую для обработки большинства прокручиваемых контейнеров. Http://pastebin.com/TAujMUu9 Единственное, что отсутствует, это 'HorizontalScrollView', я думаю. –
возможно дубликат [андроида леденец Scrollview Краевой эффект цвет] (HTTP: //stackoverflow.com/questions/27104521/android-lollipop-scrollview-edge-effect-color) – alanv