Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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?

  • ViewHolder ArrayIndexOutOfBoundsException: longitud = 2; Índice = 2
  • Herramientas de ListView: listitem no funciona en android studio 2.2 stable channel
  • Cómo ocultar la línea horizontal en la parte inferior de cada elemento en android listview?
  • ¿Cómo puedo implementar un ListView sin ListActivity? (Utilice sólo Actividad)
  • Android ListView diferentes imágenes de divisor
  • SetOnItemClickListener en ListView personalizado
  • Cómo arrastrar un elemento de un listview y dejarlo en un textView exterior?
  • Implementar desplazamiento sin fin en ListView
  • 7 Solutions collect form web for “Control del color del borde de atenuación en ListViews”

    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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.