2012-04-01 2 views
0

Gibt es eine pure-Java-Methode, um das Attribut android: button zu setzen? Mein Anwendungsfall ist, dass ich einige Radiobuttons mit benutzerdefinierten Ein/Aus-Bildern habe. Sie sind derzeit in XML, aber aus verschiedenen Gründen möchte ich, dass ihre Erstellung in reinem Java erfolgt. Derzeit ist die android:button Referenzen eine <selector> XML-Datei:Android: Java-Äquivalent von Android: Schaltfläche Attribut?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" 
     android:drawable="@drawable/red_down_full" /> 
    <item android:drawable="@drawable/red_down" /> 
</selector> 

Gibt es eine Möglichkeit, entweder

  • Referenz die <selector> XML-Datei in java
  • die <selector> ganz überspringen und setzen nur die state_checked Bild in Java ?

Antwort

0

Ja, Sie können den XML-Bildselektor über Code einstellen. Wenn Sie den Wahlschalter auf RadioButton setzen möchten, müssen Sie seinen setButtonDrawable(idOfYourSelector) anrufen.

Der Code wird wie folgt sein:

((RadioButton)findViewById(R.id.yourRadioButton)).setButtonDrawable(R.drawable.yourSelector); 

Wenn Sie nur das Bild, das Sie für state_checked verwendet festlegen möchten, dann müssen Sie auf setButtonDrawable(idOfYourImage) stattdessen die ID Ihrer Wähler die ID Ihres state_checked Bild liefern . In Ihrem Fall wird es sein:

((RadioButton)findViewById(R.id.yourRadioButton)).setButtonDrawable(R.drawable.red_down_full); 

Um sicherzustellen, dass es nicht das Etikett Ihrer RadioButton überlappen, haben Sie die Breite Ihres drawable kennen. Stellen Sie dann die linke Polsterung Ihrer RadioButton ein, abhängig von der Breite Ihrer drawable. Dadurch wird sichergestellt, dass das Bild für Ihre RadioButton nicht mit seinem Etikett überlappt.

+0

Das ursprüngliche Radio Button-Bild bleibt jedoch über dem Hintergrund überlagert; und 'setButtonDrawable' lässt das Bild (das etwas groß ist) an die Begrenzungsbox des ursprünglichen Optionsfelds abschneiden; keiner scheint zu tun was "android: button =" ... "' tut –

+0

@LiHaoyi: Entschuldigung dafür. Ich dachte, du fragst nach Button, nicht nach RadioButton. Ich habe meine Antwort bereits aktualisiert. – Arci

+0

@LiHaoyi: Die Lösung ist, die linke Auffüllung Ihres RadioButton entsprechend einzustellen. :) – Arci