16 Stimmen

Einstellen der Bildquelle für die ToggleButton

Ich habe eine 30px x 30px PNG-Datei, die ich gerne als android:src verwenden möchte, anstatt als android:background. Wenn ich sie als Hintergrund verwende und "wrap_content" für sowohl die Höhe als auch die Breite angebe, sieht das Endergebnis eher wie 45px x 45px aus.

Idealerweise bräuchte ich eine Mischung aus ImageButton und ToggleButton. Ich würde gerne die Funktion haben, ein android:src von ImageButton festzulegen und die Funktion des Umschaltens zu haben, wo die Zustände automatisch für mich gespeichert werden.

Irgendwelche Lösung oder Workaround?

Danke im Voraus.

Hi, Es scheint nicht zu helfen, einen anderen Style zu erstellen. Der src erscheint immer noch viel größer als sein originales 30px x 30px.

In main.xml:

In Styles.xml

    <item name="android:textOn">""</item>
    <item name="android:textOff">""</item>
    <item name="android:disabledAlpha">?android:attr/disabledAlpha</item>
    <item name="android:background">@drawable/my_btn_toggle_bg</item>

In my_btn_toggle_bg.xml

In my_btn_toggle.xml

playbutton.png und pausebutton.png sind jeweils 30px x 30px. Aber sie erscheinen viel größer, wenn ich sie auf dem Gerät betrachte.

17voto

CaseyB Punkte 24477

Sie können die Umschaltfläche so aussehen lassen, wie Sie möchten. Sie müssen einfach einen Style erstellen. Schauen Sie sich die Datei /platforms//data/res/values/styles.xml an und suchen Sie nach Widget.Button.ToggleButton. Es sieht so aus:

    <item name="android:background">@android:drawable/btn_toggle_bg</item>
    <item name="android:textOn">@android:string/capital_on</item>
    <item name="android:textOff">@android:string/capital_off</item>
    <item name="android:disabledAlpha">?android:attr/disabledAlpha</item>

Also, wenn Sie die btn_toggle_bg-Zeichnung finden, finden Sie dies:

Das zeigt Ihnen, dass es den Standard-Button-Hintergrund und eine Zeichnung namens btn_toggle für die src verwendet. btn_src.xml sieht so aus:

Diese beiden Zeichnungen werden verwendet, um den Zustand der Schaltfläche anzuzeigen. Sie werden tatsächlich btn_toggle_{on/off}.9.png genannt, da es sich um 9-Patch-Bilder handelt, die sich dehnen, um zur Größe der Schaltfläche zu passen.

6voto

phreakhead Punkte 13829

Ich habe herausgefunden, wie man dies macht (eine kleinere Hintergrundbild im Inneren eines großen ToggleButtons zentriert) mit ScaleDrawable:

Legen Sie Ihren ToggleButton fest, um einen Selektor-Drawable wie gewohnt zu verwenden:

Dann erstellen Sie für jedes der oben genannten Drawables der Elemente einen ScaledDrawable, der auf Ihre tatsächliche Bilddatei zeigt. z.B. ic_star_selected_centered.xml:

Schließlich gibt es einen Fehler in Android, der dazu führt, dass alle ScaledDrawables anfangs unsichtbar sind, bis Sie ihren Level setzen. Wenn Sie also Ihre Ansicht aufblähen, rufen Sie setLevel() von 1-10000 auf (1 ist die kleinste Skala, 10000 ist vollständige Größe):

    StateListDrawable star = (StateListDrawable) myToggleButton.getBackground();
    star.setLevel(5000); // zentriert das Bild auf halbe Größe. Schande über Android, dass es magische Zahlen verwendet!

0voto

Zusätzlich zu dem, was @caseyB gesagt hat (sehen Sie sich die Kommentare an), musste ich das Thema der Aktivität ändern, um den beabsichtigten Effekt zu erzielen. Ich denke, dies ist ein Problem auf HoneyComb Xoom und könnte auf Handys nicht gesehen werden. Danke an alle, die sich meine Frage angesehen und geholfen haben.

-1voto

Bostone Punkte 35692

"Quick and dirty" Weg, dies zu erreichen, besteht darin, ein relatives Layout zu verwenden und Ihr ImageView über den ToggleButton zu platzieren. Setze android:layout_centerInParent="true" und setze deinen onClick-Listener auf den Toggle

Gesagt wird - die andere Lösung von CaseyB (Anpassen von Hintergrunddateien) ist der richtige Ansatz

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X