2010-05-04 17 views
6

Ok, ich versuche eine benutzerdefinierte Ansicht namens CheckedRelativeLayout zu erstellen.Android: Wo finde ich den RadioButton Drawable?

Ihr Zweck ist der gleiche wie ein CheckedTextView, um es in einer Liste der gewünschten Elemente oder in einer Spinner verwenden zu können.

Es funktioniert alles gut, ich erweiterte RelativeLayout und implementiert Checkable Schnittstelle.

Allerdings stecke ich auf ein recht einfaches Problem: Wo finde ich die Drawable, die CheckedTextView und RadioButton verwenden?

Ich schaute auf den Quellcode von beiden, und sie scheinen com.android.internal.R zu verwenden. Nun ... das sind interne Sachen. Ich kann also nicht darauf zugreifen.

Irgendeine Möglichkeit, diese Drawables zu bekommen oder das Problem irgendwie zu lösen?

Antwort

13

Blick unter SDK-Ordner /platforms/android-2.0/data/res/ Sie sie entweder durch android.R.drawable (wenn öffentlich) oder müssen sie als ziehbar zu einem Projekt

+0

Das ist großartig. Ich habe sie gefunden. Habe auch das entsprechende 'R.drawable.btn_radio' gefunden. Aber das ist nur einer. Es gibt 'btn_radio_off.png' Dateien usw. Wie kann ich auf diese zugreifen? Gibt es etwas wie Staatsmanagement? – Peterdk

+0

ist es ein Stateful Drawable. Es ändert den Status basierend auf dem Status der Ansicht. Wenn Sie es im SDK-Ordner betrachten, ist es als XML definiert. Wenn man sich das XML anschaut, kann man sehen, welche tatsächlichen PNGs verwendet werden (sie sind in Drawable-HDPI/MDPI-Ordnern. Stateful Drawable sind einfach genial und man kann dasselbe mit Farben machen. –

+3

Um "btn_radio" für das aktuelle Theme zu verwenden kann "? android: attr/listChoiceIndicatorSingle" als Zeichenfläche verwenden. – sidon

5

Für kopieren zugreifen können der Vollständigkeit halber:

Hier einige Codestücke, die zeigen, wie Sie es mit der oben akzeptierten Antwort funktioniert haben.

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