Control del color del borde de atenuación en ListViews

Tengo un tema que se deriva del tema de luz por defecto de Android. Mis ListViews se configuran con un fondo blanco, y supongo que como un efecto secundario de esto, el color del borde de descoloramiento es blanco, que no es algo que quiero – quisiera que fueran negros.

Parece imposible cambiar simplemente el color del borde (aunque puedo controlar la longitud y otros factores), y la sugerencia habitual de usar un color negro para el color de la pista de listview da lugar a algunos efectos secundarios bastante horribles cuando la lista se desplaza.

¿Puede cualquier persona aconsejar una manera confiable de cambiar el color del borde que se descolora a un color arbitrario?

Desafortunadamente usted no puede hacer esto fácilmente. El punto entero de los bordes de descoloramiento es desvanecerse en el fondo, no dibujar un cierto color al azar. Sin embargo, puede intentar extender ListView y reemplazar getSolidColor () para devolver el color que desea para los bordes de decoloración. debería funcionar bien.

En realidad, es mucho más fácil que eso.

Puede cambiar el color del fundido a cualquier cosa que desee usando la configuración 'android: cacheColorHint'.

p.ej:

<ListView .... android:cacheColorHint="#FFFFFF" /> 

Tuve el problema de que el blanco era el "Overscroll" de color, no en realidad el borde de decoloración.

Intenta esto (asumiendo que quieres un borde de desvanecimiento, pero no el deslumbramiento blanco horrible cuando llegas a los extremos!

 <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:requiresFadingEdge="vertical" android:fadingEdgeLength="10dp" android:overScrollMode="never" > </-- this is the line you want i think --> </ListView> 

Puede cambiar el color EdgeEffect de un ListView o GridView mediante la reflexión. Copie los siguientes métodos estáticos de fábrica en su proyecto y use setEdgeGlowColor(yourListView, yourAwesomeColor); :

 public static void setEdgeGlowColor(AbsListView listView, int color) { try { Class<?> clazz = AbsListView.class; Field fEdgeGlowTop = clazz.getDeclaredField("mEdgeGlowTop"); Field fEdgeGlowBottom = clazz.getDeclaredField("mEdgeGlowBottom"); fEdgeGlowTop.setAccessible(true); fEdgeGlowBottom.setAccessible(true); setEdgeEffectColor((EdgeEffect) fEdgeGlowTop.get(listView), color); setEdgeEffectColor((EdgeEffect) fEdgeGlowBottom.get(listView), color); } catch (Exception ignored) { } } public static void setEdgeEffectColor(EdgeEffect edgeEffect, int color) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { edgeEffect.setColor(color); return; } Field edgeField = EdgeEffect.class.getDeclaredField("mEdge"); Field glowField = EdgeEffect.class.getDeclaredField("mGlow"); edgeField.setAccessible(true); glowField.setAccessible(true); Drawable mEdge = (Drawable) edgeField.get(edgeEffect); Drawable mGlow = (Drawable) glowField.get(edgeEffect); mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN); mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN); mEdge.setCallback(null); // free up any references mGlow.setCallback(null); // free up any references } catch (Exception ignored) { } } 

He publicado una solución completa para este problema en una clase que extiende ListView. Aquí: ¿Es posible cambiar el color del FadingEdge de un ListView?

Si te refieres al "brillo de borde / efecto", encontré una manera muy simple (pero hackeada) de lograr esto (cambiando el color del resplandor):

 int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", "drawable", "android"); Drawable androidGlow = context.getResources().getDrawable(glowDrawableId); androidGlow.setColorFilter(brandColor, PorterDuff.Mode.MULTIPLY); 

Aproveché el hecho de que el efecto del resplandor es realmente Drawable (y un-mutate en eso), y aplicado un filtro en él. Más sobre ello, aquí: http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/

Esta biblioteca resolverá su problema: https://github.com/AndroidAlliance/EdgeEffectOverride

  • Android ListView Color del texto
  • Ocultación de pie de página en ListView
  • Cómo crear listview con categorías / segmentos?
  • Obtener java.lang.ArrayIndexOutOfBoundsException en android
  • ¿Por qué los elementos de ListView no crecen para envolver su contenido?
  • CheckBox cambia el valor dos veces
  • Cómo establecer pull up para actualizar SwipeRefreshLayout
  • Android EditText dentro de ListView?
  • El ListView de fondo se vuelve negro al desplazarse
  • Cómo pasar varios valores de matriz en una clase Adaptador personalizado para Vista de lista personalizada?
  • ListView con textViews envueltos horizontalmente rellenados dinámicamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.