Intereting Posts
Android + Arduino Bluetooth Передача данных Как справиться с отменой после удаления, чтобы удалить в android ListView? Google Espresso или Robotium Исходный код приложения для будильника Как я могу запретить Android Studio автоматически сворачивать мои пакеты в навигации по проекту? Как сохранить выбранные элементы ExpandableListView в ArrayList Android: настраиваемый селектор текста Java Dates – Какой правильный класс использовать? Использование функции Call Enqueue в модификации Выполнение плагинов не распространяется на ошибку конфигурации жизненного цикла Эквивалент селекторов классов CSS для Android-просмотров? Где я могу найти файл .apk на своем устройстве, когда я загружаю любое приложение и устанавливаю? Использование MultiDexApplication приводит к тому, что тест Robolectric для класса приложения прерывается Android Studio: Исключить файл ресурсов в ресурсах sourceSets Lollipop AppCompat-v7 21 – Атрибут «тема» уже определен

ExpandableListView – групповая индикация растягивается, чтобы соответствовать размеру текста

У меня есть индикация группы с небольшим значком, и я использую groupIndicator для вызова селектора, чтобы нарисовать его, но я вижу, что андроид по умолчанию растягивает этот значок, чтобы он соответствовал размеру текста

Как я могу предотвратить это поведение и отобразить значок с его оригинальным размером?

Solutions Collecting From Web of "ExpandableListView – групповая индикация растягивается, чтобы соответствовать размеру текста"

Вы можете добавить индикатор группы по методу setGroupIndicator . Но по умолчанию Android растягивает высоту индикатора, чтобы соответствовать высоте элемента группы. (Ширина может быть скорректирована методом setIndicatorBounds .) Поэтому вы должны сделать высоту группового индикатора точно такой же, как высота группы элементов. (См. ExpandableListView )

В противном случае вы можете сделать полностью настроенный групповой индикатор с помощью методов onGroupCollapsed и onGroupExpanded . Просто сделайте представление с некоторыми состояниями. Когда эти методы вызывают, измените состояние своего представления. (См. ExpandableListAdapter )

group_indicator.9.png

Независимо от того, какое изображение вы используете в качестве индикатора вашей группы, сделайте его образ 9 патчей (xxx.9.png) и установите его растяжимые области вокруг пограничных пикселей (которые, вероятно, могут быть прозрачными). Это предотвратит растяжение изображения с середины.

<ExpandableListView android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/elv_store_info_Expandlist" android:cacheColorHint="#FFFFFF" android:overScrollMode="never" android:fastScrollEnabled="false" android:fastScrollAlwaysVisible="false" android:indicatorRight="20dp" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:groupIndicator="@drawable/store_info_expandabellist_indicator" /> 

@ store_info_expandabellist_indicator.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_empty="true" android:drawable="@drawable/bitmap_btn_arraw_right_dark_small"> </item> <item android:state_expanded="true" android:drawable="@drawable/bitmap_btn_arraw_bottom_white_small"> </item> <item android:drawable="@drawable/bitmap_btn_arraw_right_dark_small"> </item> </selector> 

@bitmap_btn_arraw_right_dark_small

  <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:left="11dp" android:right="11dp" android:top="12dp" android:bottom="12dp" android:drawable="@drawable/btn_arrowright_dark"> </item> </layer-list> 

Я думаю, что в этом случае проще всего включить индикатор внутри вашей группы строк (как изображение) и изменить его выбранное состояние на основе расширения группы. Вы хотите убедиться, что ваш ImageView использует селектор с выбранными состояниями.

Что-то вроде этого:

  @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View row; if (convertView != null) { row = convertView; } else { row = LayoutInflater.from(getContext()).inflate(R.layout.group_row, null)); } final ImageView indicator = (ImageView)row.findViewById(R.id.indicator); indicator.setSelected(isExpanded); return row; } 

Chitacan спасибо за комментарий. Очень полезно!

Но если вы пытаетесь изменить представления (например, индикатор) в groupview в методах onGroupExpanded и onGroupCollapsed, как я, вы, в конце концов, узнаете, что вернутся в исходное состояние. Причина: exp.listview вызывает getGroupView после расширения и краха. Если вы создаете представления там и не держите их где-то, все будет генерироваться с нуля. Таким образом, вы можете просто изменить представление (индикатор) в методе getGroupView с помощью параметра isExpanded. Надеюсь, это поможет, и вы не потеряете так много времени, как я. В этом случае вам не понадобятся методы onGroupCollapsed и onGroupExpanded.

Прежде всего, спасибо coderat. Ваш ответ мне очень помог. Недавно я понял, как можно решить не только проблему растяжения, но и проблему, при которой выталкиваемая выровнена по отношению к нижней / верхней части, когда groupItem больше по высоте, чем растягиваемый. Я немного поменял 9patch. Это изображение также будет работать для всех экранных плотностей (вам не нужно создавать масштабированный 9patch для каждой доступной папки (hdpi, mdpi, …)). Надеюсь, это поможет 😉

Введите описание изображения здесь