Intereting Posts
Как сделать кнопочный щелчок и просмотреть элемент списка нажмите в настройке просмотра списка в android Получение уровня сигнала Wi-Fi в Android FCM (Firebase Cloud Messaging), как отправить на все телефоны? Rest Server или API для тестирования моего Restful клиента? Несколько пакетов в Android-приложении Невозможно разместить плавучую кнопку действия (FAB) между заголовком и элементами в DrawerLayout с помощью RecyclerView Android-контекст вне класса Activity Уведомление о контакте в верхней части области уведомлений Отображение утреннего, дневного, вечернего, ночного сообщений на основе Time in java Статистика приложений для Android на сетевом уровне пользователей Android / установлена Правильное обнаружение прокрутки в GridView, размещенном внутри ViewPager в Android Невозможно создать экземпляр активности java.lang.ClassNotFoundException Темы Android – определение цветов в пользовательских тем Попытка заглушить андроид Класс активности с использованием PowerMockito throws RuntimeException «Stub!» Ошибка: я могу щелкнуть в навигационном ящике

Верхняя подсветка ListView при прокрутке

На границе отображается цвет по умолчанию (оранжевый на моем Nexus S), прокручивая ListView до предела. Как изменить этот цвет?

Я действительно не знаю, как это объяснить. Посмотрите на эту картинку:

Просмотр списка виджетов Android в верхней части экрана прокрутки

Итак, как изменить цвет выделения, когда ListView прокручивается до границы? Использование тем или стилей

Solutions Collecting From Web of "Верхняя подсветка ListView при прокрутке"

Решение заключается в использовании setOverscrollFooter(null) и setOverscrollHeader(null) . Документация здесь !

Вы также можете установить его непосредственно в XML:

 <ListView android:overScrollMode="never" /> 

Или укажите нижний колонтитул и заголовок:

 <ListView android:overscrollHeader="@null" android:overscrollFooter="@null" /> 

NB: Существует также свойство fadingEdge которое может вас заинтересовать.

Поддерживаются методы «Overscroll», начиная с уровня API 9

Наконец я нашел решение.

  1. setOverscrollFooter(null) и setOverscrollHeader(null) не работает. По крайней мере, на 2.3. *. Установка атрибутов из * .xml тоже не помогает.
  2. setOverScrollMode(View.OVER_SCROLL_NEVER) вызывает сглаженную прокрутку. По крайней мере, на 2.3. *.

Единственное решение, которое действительно работает, связано с использованием Java Reflection. Он работает даже с уродливыми пользовательскими списками Samsung с эффектом переполнения отскока. Вот фрагмент:

 @Override protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { //onOverScrolled method must be overrided, or we will see the background of the listview when overscroll fast. } private void removeOverscrollEffect() { try { Class<?> superClass = getClass().getSuperclass().getSuperclass(); Field field = superClass.getDeclaredField("mEdgeGlowTop"); field.setAccessible(true); Object edgeGlowTop = field.get(this); if (edgeGlowTop != null) { Class<? extends Object> edgeClass = edgeGlowTop.getClass(); Field edgeDrawable = edgeClass.getDeclaredField("mEdge"); edgeDrawable.setAccessible(true); edgeDrawable.set(edgeGlowTop, new ColorDrawable(Color.TRANSPARENT)); Field glowDrawable = edgeClass.getDeclaredField("mGlow"); glowDrawable.setAccessible(true); glowDrawable.set(edgeGlowTop, new ColorDrawable(Color.TRANSPARENT)); field.set(this, edgeGlowTop); } Field fieldBottom = superClass.getDeclaredField("mEdgeGlowBottom"); fieldBottom.setAccessible(true); Object edgeGlowBottom = fieldBottom.get(this); if (edgeGlowBottom != null) { Class<? extends Object> edgeClassBottom = edgeGlowBottom.getClass(); Field edgeDrawableBottom = edgeClassBottom.getDeclaredField("mEdge"); edgeDrawableBottom.setAccessible(true); edgeDrawableBottom.set(edgeGlowBottom, new ColorDrawable(Color.TRANSPARENT)); Field glowDrawableBottom = edgeClassBottom.getDeclaredField("mGlow"); glowDrawableBottom.setAccessible(true); glowDrawableBottom.set(edgeGlowBottom, new ColorDrawable(Color.TRANSPARENT)); fieldBottom.set(this, edgeGlowBottom); } } catch (Exception e) { Log.e(TAG, e.getMessage()); } } 

Надеюсь, это поможет.

Вот хорошая статья об оптимизации фона в ListView .

Чтобы исправить эту проблему, все, что вам нужно сделать, это либо отключить оптимизацию подсказок кеш-цвета, если вы используете не сплошной цвет фона, либо установите подсказку на соответствующее значение сплошного цвета. Вы можете сделать это из кода (см. SetCacheColorHint (int)) или предпочтительно из XML, используя атрибут android: cacheColorHint. Чтобы отключить оптимизацию, просто используйте transparent color #00000000 . На следующем скриншоте показан список с android:cacheColorHint="#00000000"

Используйте его в файле XML –

 <ListView --- android:fadingEdge="none" ---</ListView> 

Редакция:

Использование затухающих ребер может привести к заметным ухудшениям производительности и должно использоваться только тогда, когда это требуется визуальным дизайном приложения. Чтобы запросить края затухания с уровнем API 14 и выше, вместо этого используйте атрибут android: requireFadingEdge .

Проверьте эту ссылку API

Я использовал ответ Корда, пока он не прекратил работать в Lollipop, поэтому я перешел на это:

 try { Class<?> superClass = getClass().getSuperclass().getSuperclass(); Field field = superClass.getDeclaredField("mEdgeGlowTop"); field.setAccessible(true); field.set(this, new NoEdgeEffect(getContext())); Field fieldBottom = superClass.getDeclaredField("mEdgeGlowBottom"); fieldBottom.setAccessible(true); fieldBottom.set(this, new NoEdgeEffect(getContext())); } catch (Exception e) { } class NoEdgeEffect extends EdgeEffect { public NoEdgeEffect(Context context) { super(context); } public boolean draw(Canvas canvas) { // Do nothing return false; } } 

Вы можете использовать android: listSelector = "# 002234".

В приведенном выше значении может быть любой цветовой код, который можно легко найти в Интернете.