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.

  • Llamar al método setEmpty de ListView no funciona (no se muestra nada cuando la lista está vacía)
  • Android: los elementos no habilitados de ListView dibujan un divisor invisible
  • Android - Animación al eliminar elementos de ListView
  • Seleccionar todos los elementos de ListView
  • ¿Cómo actualizar ListView en caso de uso CursorAdapter?
  • Obtener el elemento seleccionado mediante la casilla de verificación en ListView
  • ¿Puede cualquier persona aconsejar una manera confiable de cambiar el color del borde que se descolora a un color arbitrario?

  • ¿Cómo actualizar ListView en caso de uso CursorAdapter?
  • Android ListView Deslizar hacia la derecha y hacia la izquierda para aceptar y rechazar
  • Java.lang.ClassCastException: android.widget.LinearLayout no se puede convertir en android.widget.ListView
  • Cómo cambiar el color del texto del elemento de lista simple
  • Cómo obtener todos los elementos de un ArrayAdapter?
  • Herramientas de ListView: listitem no funciona en android studio 2.2 stable channel
  • 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.