在我的应用中,我像这样更改了过度滚动发光效果的颜色:
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);
但是当我更新为棒棒糖时,此代码崩溃。我收到以下错误代码:
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)
似乎棒棒糖中缺少overscroll_glow资源。
我该如何实现?
您可以在主题中指定android:colorEdgeEffect
,以更改整个应用程序中的过滚动发光颜色。默认情况下,这继承了android:colorPrimary
设置的原色值。
RES /值/的themes.xml:
<style name="MyAppTheme" parent="..."> ... <item name="android:colorEdgeEffect">@color/my_color</item> </style>
或者,您可以使用嵌入式主题叠加层为单个视图修改此值。
RES /值/的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 /布局/ my_layout.xml:
<ListView
...
android:theme="@style/MyEdgeOverlayTheme" />
"android:colorEdgeEffect"
解决方案效果很好,并且比以前的技巧好得多。但是,如果需要按规律更改边缘颜色,则无法使用。
在棒棒糖中,可以使用项目样式colorPrimary自定义过度滚动效果颜色:
我正在使用它来以编程方式在android L上更改边缘颜色。这既适用于listView也适用于scrollView,视图会对其进行扩展。
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static void setEdgeEffectL(View scrollableView, int color) {
final String[] edgeGlows = {"mEdgeGlowTop", "mEdgeGlowBottom", "mEdgeGlowLeft", "mEdgeGlowRight"};
for (String edgeGlow : edgeGlows) {
Class<?> clazz = scrollableView.getClass();
while (clazz != null) {
try {
final Field edgeGlowField = clazz.getDeclaredField(edgeGlow);
edgeGlowField.setAccessible(true);
final EdgeEffect edgeEffect = (EdgeEffect) edgeGlowField.get(scrollableView);
edgeEffect.setColor(color);
break;
} catch (Exception e) {
clazz = clazz.getSuperclass();
}
}
}
}
在平台21中不存在。您可以从平台20复制资源并使用它们。
我知道我来不及了,但这对于我的应用程序api> = 17: