Color androide del efecto del borde del scrollview del lollipop

En mi aplicación cambio el color del efecto de resplandor de overscroll como este:

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); 

Pero cuando actualizé a lollipop este código se bloquea. Consigo siguiente código de error:

 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) 

Parece que el recurso overscroll_glow falta en lollipop. ¿Cómo puedo lograr esto en Lollipop?

Gracias por adelantado.

Puede especificar android:colorEdgeEffect en su tema para cambiar el color de resplandor de overscroll en su aplicación completa. De forma predeterminada, esto hereda el valor de color primario establecido por android:colorPrimary .

Res / values ​​/ themes.xml:

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

Como alternativa, puede modificar este valor para una sola vista utilizando una superposición de temas en línea.

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" /> 

La solución "android:colorEdgeEffect" funciona perfectamente, y es mucho mejor que los hacks anteriores. Sin embargo, no se puede utilizar si el color del borde necesita cambiarse prorgramáticamente.

Sin embargo, es posible utilizar la reflexión para hacerlo, estableciendo los objetos EdgeEffect directamente en las instancias de AbsListView o ScrollView . Por ejemplo:

 EdgeEffect edgeEffectTop = new EdgeEffect(this); edgeEffectTop.setColor(Color.RED); EdgeEffect edgeEffectBottom = new EdgeEffect(this); edgeEffectBottom.setColor(Color.RED); try { Field f1 = AbsListView.class.getDeclaredField("mEdgeGlowTop"); f1.setAccessible(true); f1.set(listView, edgeEffectTop); Field f2 = AbsListView.class.getDeclaredField("mEdgeGlowBottom"); f2.setAccessible(true); f2.set(listView, edgeEffectBottom); } catch (Exception e) { e.printStackTrace(); } 

EdgeEffect.setColor() fue añadido en Lollipop.

Sin embargo, las mismas advertencias que cualquier solución basada en la reflexión.

En lollipop el color del efecto del overscroll se puede modificar para requisitos particulares con el colorPrimary del estilo del artículo:

 <style name="MyApp" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/mycolor</item> </style> 

Este elemento también afecta al color de la barra de herramientas.

overscroll_glow.png no existe en la plataforma 21. Puede copiar los recursos de la plataforma 20 y usarlos.

Puede encontrar overscroll_glow.png en:

{SDK_FOLDER} \ plataformas \ android-20 \ data \ res

De esta manera usted no utiliza la reflexión que puede, como puede ver, jugar con su programa después de algunas actualizaciones.

Estoy usando esto para cambiar el color del borde programmatically en androide L. Esto trabaja para listView y scrollView, y las opinión las extienden.

 @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(); } } } } 
  • React Native: TouchableOpacity onPresiona problemas dentro de un ScrollView
  • Desplazamiento en Horizontal ScrollView pierde el foco del elemento enfocado,
  • Diseño relativo en ScrollView
  • ¿Dibuja gráficas en android utilizando Graphview?
  • Desplazamiento de TextView en una ScrollView a una subcadena de texto específica
  • Editar texto dentro de la vista de desplazamiento no se puede desplazar
  • Android ScrollView ¿cómo mantener el componente en la pantalla cuando se desplaza a la parte superior de la pantalla?
  • Scrollview es extremadamente lento en ics (android 4.0) cuando contiene una larga textview
  • ScrollView corta la parte superior y deja espacio en la parte inferior
  • ¿Puedo desplazar un ScrollView de forma programática en Android?
  • Android - ScrollView como foursquare con mapas + lista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.