如何在Android Lollipop中添加滚动视图边缘颜色效果?

问题描述 投票:14回答:6

在我的应用中,我像这样更改了过度滚动发光效果的颜色:

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 scrollview android-5.0-lollipop
6个回答
42
投票

您可以在主题中指定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" />

8
投票

"android:colorEdgeEffect"解决方案效果很好,并且比以前的技巧好得多。但是,如果需要按规律更改边缘颜色,则无法使用。


4
投票

在棒棒糖中,可以使用项目样式colorPrimary自定义过度滚动效果颜色:


2
投票

我正在使用它来以编程方式在android L上更改边缘颜色。这既适用于listView也适用于scrollView,视图会对其进行扩展。


1
投票

@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复制资源并使用它们。


0
投票

我知道我来不及了,但这对于我的应用程序api> = 17:

© www.soinside.com 2019 - 2024. All rights reserved.