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.
- ListView no aparece en MainActivty de mi aplicación (una imagen adjunta)
- Limitar el número de filas de listview
- Android listview mostrar todos los elementos disponibles sin desplazamiento con el encabezado estático
- Android listview, pase a la acción
- Los elementos de vista de lista eliminan los mapas de bits de la memoria cuando el usuario se desplaza
¿Puede cualquier persona aconsejar una manera confiable de cambiar el color del borde que se descolora a un color arbitrario?
- Averigüe si ListView se desplaza hacia abajo?
- Android scroll mientras arrastra y suelta
- Implementar desplazamiento sin fin en ListView
- La lista muestra el color negro
- Android: ¿Es posible actualizar un solo elemento en un listview?
- ¿Cómo implementar ExpandableListview multinivel en Android?
- Android ListView en Actividad que se refresca en el cambio de orientación
- Android - ¿cuál es el significado de StableIDs?
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