2010-05-04 8 views
6

Ok, próbuję utworzyć niestandardowy widok o nazwie CheckedRelativeLayout.Android: Gdzie znaleźć RadioButton Drawable?

Jego cel jest taki sam jak CheckedTextView, aby można go było użyć na liście wybranych elementów lub w postaci Spinner.

Teraz wszystko działa dobrze, rozszerzyłem RelativeLayout i wprowadziłem interfejs Checkable.

Jednak utknąłem na dość prostym problemie: Gdzie mogę znaleźć Drawable, który używają CheckedTextView i RadioButton?

Spojrzałem na kod źródłowy obu i wydają się używać com.android.internal.R. Cóż ... to wewnętrzne rzeczy. Nie mogę więc uzyskać do niego dostępu.

Jakikolwiek sposób, aby uzyskać te Drawables lub jakoś rozwiązać problem?

Odpowiedz

13

poszukaj w folderze SDK /platforms/android-2.0/data/res/ można do nich dostęp przez którąkolwiek android.R.drawable (jeśli publiczny) lub trzeba je skopiować jako rozciągliwej do projektu

+0

To świetnie. Znalazłem ich. Znaleziono również odpowiadający 'R.drawable.btn_radio'. Ale to tylko jeden. Istnieją pliki 'btn_radio_off.png' itp. Jak mogę uzyskać do nich dostęp? Czy jest coś takiego jak zarządzanie statystyką? – Peterdk

+0

to stanowy wyciągany. Zmienia stan na podstawie stanu widoku. Jeśli spojrzysz na to w folderze SDK, to jest to XML. Patrząc na XML można zobaczyć, które rzeczywiste png są używane (są one w folderach drawable-hdpi/mdpi.) Stacjonarne rysunki są po prostu niesamowite i możesz zrobić te same rzeczy z kolorami. –

+3

Aby użyć "btn_radio" dla aktualnego motywu może użyć "? android: attr/listChoiceIndicatorSingle" jako swojego ciągnięcia. – sidon

5

Dla ze względu na kompletność:

Oto niektóre fragmenty kodu, które pokazują, jak mam to działa z powyższą akceptowaną odpowiedzią.

//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();