ho un gruppo di FrameLayout
che voglio essere verificabile/selezionabile,personalizzato ispezionabile View che risponde al cambio
Cioè, dopo un clic vorrei il FrameLayout
da visualizzare come checked
- se premuto di nuovo lo farei piace a diventare un checked
. Inoltre, voglio che questa immagine visuale sia descritta come al solito attraverso l'uso di uno <selector>
.
io non riesco a ottenere questo lavoro - io non sono sicuro di quello che mi manca:
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);
}
}
Il layout della CheckableFrameLayout
:
<com.test.view.CheckableFrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/selector_horizontal"
android:clickable="true" >
Il selettore sostenerla (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"/>
Usando il codice di sopra della "state_pressed" sta funzionando benissimo, ma la vista non viene controllata (non è il codice Checkable
chiamato come scoperto tramite debug).
'onCreateDrawableState' non viene chiamato da LinearLayout per qualche motivo. Qualche idea, perché? –
se qualcuno vuole ottenere una soluzione completa, controlla questo repository: https://github.com/shamanland/AndroidLayoutSelector c'è un clic selezionabile/controllabile '' 'LinearLayout''' come un' '' ToggleButton''' –