Benutzerdefinierte Überprüfbar Ansicht, die eine Antwort auf Selector
Habe ich eine Gruppe von FrameLayout
was ich will aktivierbar/auswählbar,
Dass ist nach ein Sie auf ich möchte die FrameLayout
Anzeige checked
- wenn gedrückt, würde ich wieder wie es sich un -checked
. Was mehr ist, ich will das visual que beschrieben werden wie gewohnt durch, obwohl die Verwendung einer <selector>
.
Ich kann nicht scheinen, um diese arbeiten - ich bin mir nicht sicher, was ich vermisst:
public class CheckableFrameLayout extends FrameLayout implements Checkable {
private boolean mChecked = false;
public CheckableFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setChecked(boolean checked) {
mChecked = checked;
refreshDrawableState();
}
public boolean isChecked() {
return mChecked;
}
public void toggle() {
setChecked(!mChecked);
}
}
Das layout der CheckableFrameLayout
:
<com.test.view.CheckableFrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/selector_horizontal"
android:clickable="true" >
Den Selektor sichern (selector_horizontal.xml):
<item android:drawable="@drawable/selector_vertical_selected" android:state_pressed="false" android:state_checked="true"/>
<item android:drawable="@drawable/selector_vertical_pressed" android:state_pressed="true" android:state_checked="false"/>
<item android:drawable="@drawable/selector_vertical_normal" android:state_pressed="false" android:state_checked="false"/>
Mit dem obigen code das "state_pressed" ist in Ordnung, aber die Ansicht selbst wird nicht immer überprüft (nicht die Checkable
code aufgerufen wird, wie entdeckt, durch Debuggen).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen von den folgenden code, um eine
Checkable
Klasse ermöglicht Selektoren zu arbeiten:onCreateDrawableState
nicht aufgerufen LinearLayout aus irgendeinem Grund. Irgendwelche Ideen, warum?LinearLayout
wie einToggleButton
android:checked="true"
Hier ist ein komplettes Beispiel für eine CheckableButton. Es funktioniert auch auf Android 4.2.
performClick()
Methode, Blick auf akzeptierte AntwortVersuchen Sie es mit
android:state_activated
.Aus der docs:
<item>
.state_activated
macht überhaupt keinen Unterschied (auch die API 11)android:checkable="true"
. Versuchen Sie, dass im layout. Dann wieder vielleicht auch nicht, der einzige Ort, sehe ich, dass erwähnt ist für den Aufbau von Menüs... obwohl ich vermute, es würde nicht Schaden, es trotzdem zu versuchen.android:clickable
, nichtandroid:checkable
.android:checkable
ist nicht verfügbar für eineFrameLayout
Drawable
Zustand nicht enthalten state_checked.Versuchen Neuordnen von tags in Ihre
selector_horizontal.xml
Diese bewertet werden von oben nach unten. Es scheint, dass in Ihrem Fall entwederandroid:state_pressed="false" or android:state_pressed="true"
angewendet wird und die Bewertung nie erreicht Dritte Zeile mitandroid:state_checked="true"
Versuchen Sie, in Erster Linie zum letzten:Neben Graeme Antwort oben
machen Sie die folgenden änderungen an toggle()
Graeme Lösung nicht gearbeitet, von mir unter Android 4.0.3 (und ich nehme an, es funktioniert nicht unter 4.0 auch). Stattdessen können Sie ändern
state_checked
zustate_activated
:und verwenden
setActivated
in IhremsetChecked
:das ist alles. Die Umsetzung
onCreateDrawableState
ist nicht erforderlich hier.true
wenn Ihre Eltern wird überprüft.