2009-12-14 2 views
2

Я использую ExpandableListView в моем приложении, и одна из жалоб, которые я получаю от пользователей , что когда List элемента расширяется, что трудно визуально отличить, где ребенок товара заканчивается и следующий элемент группы начинается.Android - ExpandableListView фон изменения для дочерних элементов

Поэтому я хотел был бы изменить фон ребенка List item к различной тени.

Жестокие попытки, которые я сделал до сих пор, были основаны на прямом изменении цвета фона и текста элементов внутри дочернего элемента View, но это приводит к потере зависаний и бликов. Поэтому мой вопрос: что такое хорошая стратегия для достижения вышеуказанного?

Я попытался styles и selectors, но что на самом деле бомжами меня если я изменить фон для дочернего элемента, то мне нужно добавить selectors для всех комбинаций фокуса/включено и т.д. Когда все, что я пытаюсь сделать это, чтобы перезаписать один вещь.

Есть ли способ унаследовать родителя style и установить background только для нефокусированного, разрешенного дочернего элемента с другим styles сохраненным?

ответ

3

Хорошо. Вот что работает для меня:

  1. Создать list_background.xml в res/drawable каталоге вашего проекта
  2. Установить фоновое значение верхнего расположения уровня вашего дочернего элемента к Drawable выше. Если вы чесать голова в этот момент - я имею в виду файл макет XML, которые получают это используются при создании дочерних вашего расширяющегося списка в ExpandableListAdapter#getChildView

Вот полной Drawable файл

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:state_enabled="true" 
     android:drawable="@drawable/list_highlight_active" /> 
    <item android:state_enabled="true" android:state_selected="true" 
     android:state_window_focused="true" 
    android:drawable="@drawable/list_highlight_inactive" /> 
    <item android:state_enabled="true" android:state_window_focused="true" 
     android:drawable="@color/item_body" /> 
    <item android:drawable="@color/item_body" /> 
</selector> 

Мне пришлось скопировать list_highlight_active.xml и list_highlight_inactive.xml из /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable в каталог, в который я поместился. @color/item_body - это всего лишь оттенок серого

0

Я только что открыл способ «немного» установить цвет фона без необходимости прыгать через селекторные обручи.

Как вы уже отметили, установка фона на сплошной цвет стирает подсветку селектора, потому что новый цвет фона скрывает его. У Droidin есть то, что является нормальным решением: предоставите свой собственный селектор фона с точными цветами, которые вы хотите. Это боль, если не сказать больше.

Но если все, что вы хотите, это небольшое цветовое дифференцирование, тогда есть более простой способ: альфа-смесь. Установите цвет фона с альфа-значением. Например, установите для фона значение «#BBFFFFFF». Первые две цифры указывают на альфа-уровень. Все это будет смешано, поэтому фон не будет чистым белым, а выделение выделения не будет нормальным ярко-оранжевым, но дети будут другого цвета, а подсветка все же будет работать. Беспроигрышная.

0

Я ищу аналогичное решение. Вы можете попробовать получить родительский вид на метод адаптера getChieldView. Я думаю, что этот родитель - это родительский взгляд на все творения. И установите фон из ресурса для этого родителя. Я делаю это следующим образом:

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.fa_report_sub_item, null); 
     View parentGroup=(View) convertView.getParent(); 
     parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item); 
    }