Ich möchte einen Bildknopf mit zwei Zuständen i) normal ii) berühren (oder klicken).
Ich habe ein normales Bild im Hintergrund der Bildschaltfläche eingestellt und versuche, das Bild (gedrückt) über die Onclick- Methode zu ändern , aber es ändert sich nicht.
Ich möchte, dass wenn ich die Bildtaste drücke, das Bild von normal zu gedrückt wechselt, bis ich eine andere Taste drücke, aber es passiert nicht .
Kann mir jemand vorschlagen, wie ich das mit dem Selektor oder zur Laufzeit machen kann ?
Hier ist mein Imagebuttonpanel-Code.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="bottom"
android:id="@+id/buttonpanel">
<ImageButton android:id="@+id/buttonhome"
android:layout_width="80dp"
android:layout_height="36dp"
android:focusable="true"
android:background="@drawable/homeselector">
</ImageButton>
<ImageButton android:id="@+id/buttonsearch"
android:layout_height="36dp"
android:layout_width="80dp"
android:background="@drawable/searchselector"
android:focusable="true">
</ImageButton>>
<ImageButton android:id="@+id/buttonreg"
android:layout_height="36dp"
android:layout_width="80dp"
android:background="@drawable/registerselector"
android:focusable="true">
</ImageButton>>
<ImageButton android:id="@+id/buttonlogin"
android:layout_height="36dp"
android:layout_width="80dp"
android:background="@drawable/loginselector"
android:focusable="true">
</ImageButton>
</LinearLayout>
und mein Selektor xml ist
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--<item android:state_pressed="true" android:drawable="@drawable/homehover"
/> <item android:state_focused="true" android:drawable="@drawable/homehover"
/> <item android:drawable="@drawable/home" /> <item android:state_window_focused="true"
android:drawable="@drawable/homehover" /> -->
<item android:state_enabled="false" android:drawable="@drawable/homehover" />
<item android:state_pressed="true" android:state_enabled="true"
android:drawable="@drawable/homehover" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/homehover" />
<item android:state_enabled="true" android:drawable="@drawable/home" />
</selector>
Ich habe auch versucht, die Bildressource bei ontouch und onclick event zu ändern, aber es hilft nicht.
android
android-layout
Hitendra
quelle
quelle
Antworten:
Erstellen Sie eine XML-Datei in Ihrem Drawable wie folgt:
Und setzen Sie Bilder entsprechend und setzen Sie dann diese XML als Hintergrund Ihrer
imageButton
.quelle
Button
, aber nichtImageButton
. Auch dies würde fürImageButton
dasandroid:src
Attribut funktionieren , aber nichtandroid:background
. Und was ist der Unterschied zwischen Ihrem und dem OP-Selektor (außer Formatierungs- und Zeichnungsnamen)? Vermisse ich etwasVersuche dies
quelle
mhh. Ich habe eine andere Lösung, die mir geholfen hat, weil ich nur zwei verschiedene Zustände habe:
In meiner .xml definiere ich den ImageButton folgendermaßen:
Die entsprechende Auswahldatei sieht folgendermaßen aus:
Und in meinem onCreate rufe ich an:
getan. hoffe das hilft. Ich habe eine Weile gebraucht, um das herauszufinden.
quelle
Hallo versuchen Sie den folgenden Code, es wird für Sie nützlich sein,
quelle
Ich denke, Sie Problem ist nicht die Auswahldatei.
du musst hinzufügen
zu Ihren Bildschaltflächen.
Standardmäßig wird der onClick auf Listenelementebene (übergeordnet) behandelt. und die imageButtons erhalten den onClick nicht.
Wenn Sie das obige Attribut hinzufügen, empfängt die Bildschaltfläche das Ereignis und der Selektor wird verwendet.
Aktivieren Sie diesen POST, der das gleiche für das Kontrollkästchen erklärt.
quelle
Wenn Sie die Bildtaste drücken möchten, sollte das Bild von normal auf gedrückt geändert werden
Am besten passen Sie den RadioButton an und verwenden ihn in einer Gruppe. Ich habe ein Beispiel dafür gesehen. Entschuldigung, ich habe mich nicht an diesen Link erinnert.
aber wenn du das vermeiden willst. Sie müssen dies zu Ihrer selector.xml hinzufügen
Einmal getan. Ich bin gerade zu Ihrem Code gekommen und füge diesen hinzu
Sie werden das Ergebnis sehen. Sie müssen jedoch die Zustände verwalten, auf die die Taste kürzlich gedrückt wurde. Damit können Sie einstellen
Ich empfehle Ihnen, alle Schaltflächenreferenzen in ein Array einzufügen.
quelle
Was Sie versuchen, ist eher eine segmentierte Schaltfläche als eine Bildschaltflächenliste.
Hier finden Sie unter http://blog.bookworm.at/2010/10/segmented-controls-in-android.html ein Beispiel dafür. Die Grundidee besteht darin, RadioButton anstelle von ImageButton anzupassen, da der RadioButton den von Ihnen benötigten Status hat
quelle
Hast du es versucht
CompoundButton
? CompoundButton verfügt über die überprüfbare Eigenschaft, die genau Ihren Anforderungen entspricht. Ersetzen Sie ImageButtons durch diese.Ändern Sie die Selektor-XML wie folgt. Möglicherweise müssen einige Änderungen vorgenommen werden, aber stellen Sie sicher, dass Sie diese
state_checked
anstelle von verwendenstate_pressed
.In
CompoundButton.OnCheckedChangeListener
müssen Sie andere basierend auf Ihren Bedingungen aktivieren und deaktivieren.OnCheckedChangeListener
Stellen Sie auf ähnliche Weise ein für jede Schaltfläche ein, wodurch andere Schaltflächen deaktiviert werden, wenn sie aktiviert ist. Hoffe das hilft.quelle
Die Antwort von @ ingsaurabh ist der richtige Weg, wenn Sie sogar einen onClick verwenden. Wenn Sie jedoch ein onTouch-Ereignis verwenden, können Sie die verschiedenen Hintergründe (immer noch dieselben wie im Beispiel von @ ingsaurabh) mithilfe von auswählen
view.setPressed()
.Weitere Informationen finden Sie im Folgenden: Die Taste "Halten" unter Android muss den Status (benutzerdefinierte XML-Auswahl) mithilfe von onTouchListener ändern
quelle
Sie können eine Auswahldatei in res / drawable erstellen
Beispiel: res / drawable / selector_button.xml
und in Layout-Aktivität, Fragment oder etc.
quelle