Intereting Posts
Загрузка изображений в tumblr API с Android Как получить временную метку входящего сообщения xmpp? Как установить переменную GNUMAKE для работы ndk-build Как создать настройку активности для отображения половины экрана снизу? Создание фоновых сервисов для низкой энергии Bluetooth на Android Обновление Android UI – сохранение и восстановление Как добавить флаги с моим намерением в файле манифеста Как применить стиль большого представления к уведомлению с помощью библиотеки Parse Что такое файловая система Android? Android – Как закрыть активность при нажатии кнопки? Как автоматически переименовать Java-метод в Eclipse? Управление кодом / сборкой для магазинов приложений Android (Google / Amazon / etc)? Использование типов сборки в Gradle для запуска того же приложения, которое использует ContentProvider на одном устройстве Удаление флага краски в Android Как полностью убить / удалить / удалить / остановить AsyncTask в Android

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, …)). Надеюсь, это поможет 😉

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