Come determinare le dimensioni appropriate per le icone ExpandableListView groupIndicator?
-
11-10-2019 - |
Domanda
Sto lavorando su un app che coinvolge e ExpandableListView. Vorremmo sostituire il groupIndicator con uno dei nostri propria scelta.
Ho creato una specifica per l'indicatore che mostra un png differente a seconda dello stato del selettore (espansa o non espansa)
<?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>
Poi ho impostato il mio layout di xml per l'uso:
(Si noti che childDivider è una png alto un pixel, piuttosto che un colore, perché l'impostazione che a un colore sembra essere spiati)
Questo funziona, se non che la nostra icona è allungata verticalmente. Questo ha senso, perché abbiamo appena creato un'icona 25x25 e sperato per il meglio. Sto cercando di capire le dimensioni del l'icona nativa in modo che possa corrispondere, ma è lì che mi imbatto in problemi.
Scavando attraverso il codice sorgente (ExpandableListView.java) ho scoperto che, per impostazione predefinita, la classe utilizzerà com.android.internal.R.styleable.ExpandableListView_groupIndicator. Così ho un id, ma nessuna icona ancora.
Mi piacerebbe essere in grado di fare:
Bitmap image = BitmapFactory.decodeResource(this.getResources(), com.android.internal.R.styleable.ExpandableListView_groupIndicator);
imWidth = image.getWidth();
imHeight = image.getHeight();
Ma come il "interno" suggerisce, non è visibile a me nello spazio utente.
Ho anche trovato getIndicate () in ExpandableListView.java, ma è privato, quindi non posso arrivare a che sia.
Sono abbastanza nuovo per le immersioni nel codice sorgente della piattaforma, e non so come altro rintracciare quell'immagine. Qualcuno può darmi una mano?
Edit: Grazie CommonsWare. Per precisare il resto per chiunque altro alla ricerca:
Android:. Drawable / expander_group è definito in /frameworks/base/core/res/res/drawable/expander_group.xml
expander_group.xml menziona che utilizza @ drawable / expander_ic_maximized e @ disegnabile / expander_ic_minimized.
Quelle drawable possono essere trovati in /frameworks/base/core/res/res/drawable/expander_ic_maximized.9.png e /frameworks/base/core/res/res/drawable/expander_ic_minimized.9.png, tra gli altri luoghi di densità specifici e simili. Il "9", spiega il motivo per cui le icone di default non hanno problemi di distorsione - sono patch-9 grafici. Le versioni di densità-agnostic delle icone sono 34px da 38px.
Soluzione
definisce base.git
di core/res/res/values/styles.xml
com.android.internal.R.styleable.ExpandableListView_groupIndicator
come android:drawable/expander_group
. Questo è un StateListDrawable
in copia del vostro SDK delle risorse. I PNGs sottostanti sono di varie dimensioni sulla base della densità.