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.

È stato utile?

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à.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top