2010-05-04 12 views
6

Ok, sto cercando di creare una vista personalizzata denominata CheckedRelativeLayout.Android: dove trovare il RadioButton Drawable?

Lo scopo è lo stesso di CheckedTextView, per poterlo utilizzare in un elenco di elementi che si desidera selezionare o in un Spinner.

Ora funziona tutto bene, ho esteso RelativeLayout e implementato l'interfaccia Checkable.

Tuttavia, sono bloccato su un problema piuttosto semplice: dove è possibile trovare il Drawable utilizzato da CheckedTextView e RadioButton?

Ho guardato il codice sorgente di entrambi e sembrano utilizzare com.android.internal.R. Beh ... questa è roba interiore. Quindi non posso accedervi.

Un modo per ottenere questi Drawables o risolvere il problema in qualche modo?

risposta

13

un'occhiata sotto cartella SDK /platforms/android-2.0/data/res/ è possibile accedervi da un'android.R.drawable (se pubblico) o la necessità di copiarli come drawable al progetto

+0

È grandioso. Li ho trovati. Trovato anche il corrispondente 'R.drawable.btn_radio'. Ma questo è solo uno. Ci sono 'btn_radio_off.png'files ecc. Come posso accedervi? C'è qualcosa come statemanagement? – Peterdk

+0

è un drawable stateful. Cambia lo stato in base allo stato della vista. Se lo guardi nella cartella SDK è definito come XML. Guardando all'XML puoi vedere quale png effettivo viene utilizzato (sono in cartelle drawable-hdpi/mdpi. Stateful drawable sono semplicemente fantastici e puoi fare lo stesso con i colori. –

+3

Per usare "btn_radio" per il tema corrente tu può usare "? android: attr/listChoiceIndicatorSingle" come drawable. – sidon

5

Per Per completezza:

Qui alcuni pezzi di codice che mostrano come l'ho ottenuto lavorando con la risposta sopra accettata.

//Image Setup (Once when creating this view) 
ImageView indicator = (ImageView) findViewById(R.id.RadioStatusImage); 
indicator.setImageDrawable(getResources().getDrawable(android.R.drawable.btn_radio)); 

//State Change (In some other method) 
    android.R.attr.state_checked 
    if (isChecked) 
    { 
    indicator.setImageState(android.R.attr.state_checked, false); 
    } 
    else 
    { 
    indicator.setImageState(View.ENABLED_STATE_SET, false); 
    } 
    invalidate(); 
Problemi correlati