¿Resplandor de encargo del color del resplandor / del borde para ListView?
Tengo un ListView
, y un estilo personalizado que básicamente se ve como Holo, pero con acentos de color amarillo en lugar de azul.
Cuando me desplazo a la parte inferior o superior de la lista, obtengo el azul desajustado. Hice overscroll_glow.png
personalizado para overscroll_glow.png
y overscroll_edge.png
, pero no sé cómo usarlos.
- Añadir imágenes sobre lienzo con Android
- Cambiar android: installLocation de preferExternal a internalOnly
- El tamaño del EditText no se ajusta al contenido
- Eliminar sombra en Android PopupWindow
- Problema de enfoque de Android WebView
¿Cómo puedo obtener mi ListView
para utilizar estos drawables en lugar de los sistemas?
¿ OverScroller
clase OverScroller
ayudaría?
- Android personalizar stackview
- Cómo mostrar la tarjeta QuickContact desde el widget
- ¿Cómo puedo actualizar correctamente AppWidget?
- Cómo cambiar la altura de la vista de lista progmmatically ..?
- ¿Cómo se borra una barra de progreso determinada para su reutilización?
- Diálogo con pestañas con fragmentos en el widget
- Android reproduciendo música en fondo
- Cómo puedo colocar un evento de doble clic en ImageView en Android
Puede utilizar una solución similar a la reflexión para hackear su forma de cambiar este color brillante:
int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", "drawable", "android"); Drawable androidGlow = context.getResources().getDrawable(glowDrawableId); androidGlow.setColorFilter(brandColor, PorterDuff.Mode.MULTIPLY);
Me encontré con el mismo problema, y parece una buena solución, al menos hasta que Google añade una API para cambiar el color (o marcar el color): http://evendanan.net/android/branding/2013/12/09/ Marca-borde-efecto /
Sólo use esta biblioteca. Sólo he tenido un problema con el contexto de ajuste en un menú emergente en el paisaje en un dispositivo que no tiene overscroll (HTC One X / Sense 4.5). ¡Funciona de maravilla!
Probado esto SetOverscrollFooter (Drawable) ?
Actualización 1 :
¡Vaya! No importa. Probablemente ya has visto esta discusión .
El comportamiento de resplandor se envuelve en la clase EdgeEffect . Puedes desactivar los efectos de borde por defecto llamando a setOverScrollMode(OVER_SCROLL_NEVER)
en tu ListView y rodando tu propia clase EdgeEffect (cuyos detalles están más allá de mí en este momento).
Actualización 2 :
Ay. Las llamadas en el objeto EdgeEffect creado dentro de AbsListView están enterradas profundamente dentro de la lógica de desplazamiento. Podría ser difícil. Una solución fácil sería una solicitud de característica para el equipo de Android para un setEdgeEffect(EdgeEffect)
en AbsListView …
Aquí está la solución:
public static void ChangeEdgeEffect(Context cxt, View list, int color){ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { EdgeEffect edgeEffectTop = new EdgeEffect(cxt); edgeEffectTop.setColor(color); EdgeEffect edgeEffectBottom = new EdgeEffect(cxt); edgeEffectBottom.setColor(color); try { Field f1 = AbsListView.class.getDeclaredField("mEdgeGlowTop"); f1.setAccessible(true); f1.set(list, edgeEffectTop); Field f2 = AbsListView.class.getDeclaredField("mEdgeGlowBottom"); f2.setAccessible(true); f2.set(list, edgeEffectBottom); } catch (Exception e) { e.printStackTrace(); } }else{ int glowDrawableId = cxt.getResources().getIdentifier("overscroll_glow", "drawable", "android"); Drawable androidGlow = cxt.getResources().getDrawable(glowDrawableId); assert androidGlow != null; androidGlow.setColorFilter(cxt.getResources().getColor(color), PorterDuff.Mode.SRC_ATOP); } }
Por favor, no olvide cambiar la línea de borde de overscroll:
final int edgeDrawableId = res.getIdentifier("overscroll_edge", "drawable", "android"); final Drawable overscrollEdge = res.getDrawable(edgeDrawableId); overscrollEdge.setColorFilter(res.getColor(colorID), android.graphics.PorterDuff.Mode.SRC_ATOP);
Añado esta respuesta porque este es uno de los mejores resultados sobre el tema y la respuesta superior ya no es correcta. Bueno, en realidad es para las versiones pre-lollipop, pero como se espera, cuando se utiliza la reflexión de java se mordió de nuevo, y eso es lo que pasó, si se utiliza el código
int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", "drawable", "android"); Drawable androidGlow = context.getResources().getDrawable(glowDrawableId); androidGlow.setColorFilter(context.getResources().getColor(R.color.gm_color), PorterDuff.Mode.MULTIPLY);
Esto se bloqueará en los dispositivos Lollipop + porque ese recurso ya no existe. Así que para Android 5. + usted debe usar:
<item name="android:colorEdgeEffect">@color/custom_color</item>
En su tema, overriden en un archivo values-v21/themes.xml
si no está orientado a la versión min 21
- Cómo implementar SQLCipher cuando se utiliza SQLiteOpenHelper
- XMPP con Java Asmack biblioteca que admite X-FACEBOOK-PLATFORM