Как определить соответствующие размеры для значков ExpandableListView groupIndicator? - PullRequest
2 голосов
/ 14 января 2011

Я работаю над приложением, которое включает и ExpandableListView.Мы хотели бы заменить groupIndicator одним из наших собственных.

Я создал спецификацию для индикатора, которая будет показывать другой png в зависимости от состояния селектора (расширенный или не расширенный)

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

Затем я настроил свой макет xml для использования:

(Обратите внимание, что childDivider - это png высотой в один пиксель, а не цвет, потому что установка этого цвета кажетсяошибка)

Это работает, за исключением того, что наша иконка растянута вертикально.Это имеет смысл, потому что мы только что создали иконку 25x25 и надеялись на лучшее.Я пытаюсь выяснить размеры нативной иконки, чтобы я мог сопоставить ее, но тут я столкнулся с проблемой.

Копаясь в исходном коде (ExpandableListView.java), я обнаружил, что по умолчанию, класс будет использовать com.android.internal.R.styleable.ExpandableListView_groupIndicator.Итак, у меня есть идентификатор, но пока нет значка.

Я бы хотел иметь возможность сделать:

Bitmap image = BitmapFactory.decodeResource(this.getResources(), com.android.internal.R.styleable.ExpandableListView_groupIndicator);
        imWidth = image.getWidth();
        imHeight = image.getHeight();

Но, как предполагает «внутренний», он не виден мне впользовательское пространство.

Я также нашел getIndicate () в ExpandableListView.java, но он закрытый, поэтому я тоже не могу этого сделать.

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

Редактировать: Спасибо CommonsWare.Чтобы объяснить остальные для всех, кто ищет:

android: drawable / expander_group определена в /frameworks/base/core/res/res/drawable/expander_group.xml.
expander_group.xml упоминает, что этоиспользует @ drawable / expander_ic_maximized и @ drawable / expander_ic_minimized.Эти чертежи можно найти в /frameworks/base/core/res/res/drawable/expander_ic_maximized.9.png и /frameworks/base/core/res/res/drawable/expander_ic_minimized.9.png, среди других мест для определенных плотностейи тому подобное.«9» объясняет, почему значки по умолчанию не имеют проблем с искажением - это графика патча 9.Версии иконок, не зависящие от плотности, имеют размер 34 на 38 пикселей.

1 Ответ

8 голосов
/ 14 января 2011

base.git s core/res/res/values/styles.xml определяет com.android.internal.R.styleable.ExpandableListView_groupIndicator как android:drawable/expander_group. Это StateListDrawable в копии ресурсов вашего SDK. Основные PNG имеют различные размеры в зависимости от плотности.

...