Estou tentando substituir a ToggleButton
aparência padrão . Aqui está o XML que define ToggleButton
:
<ToggleButton android:id="@+id/FollowAndCenterButton"
android:layout_width="30px"
android:layout_height="30px"
android:textOn="" android:textOff="" android:layout_alignParentLeft="true"
android:layout_marginLeft="5px"
android:layout_marginTop="5px" android:background="@drawable/locate_me"/>
Agora, temos dois ícones 30 x 30 que queremos usar para os estados clicado / não clicado. No momento, temos um código que altera programaticamente o ícone de plano de fundo dependendo do estado:
centeredOnLocation.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (centeredOnLocation.isChecked()) {
centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me_on));
} else {
centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me));
}
}
});
Obviamente, estou procurando uma maneira melhor de fazer isso. Tentei fazer um seletor para a imagem de fundo, que mudaria automaticamente entre os estados:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/locate_me" /> <!-- default -->
<item android:state_checked="true"
android:drawable="@drawable/locate_me_on" /> <!-- pressed -->
<item android:state_checked="false"
android:drawable="@drawable/locate_me" /> <!-- unchecked -->
Mas isso não funciona; lendo a ToggleButton
API ( http://developer.android.com/reference/android/widget/ToggleButton.html ), parece que os únicos atributos xml herdados são
XML Attributes
Attribute Name Related Method Description
android:disabledAlpha The alpha to apply to the indicator when disabled.
android:textOff The text for the button when it is not checked.
android:textOn The text for the button when it is checked.
Não parece haver o atributo android: state_checked, apesar da classe ter o método isChecked()
e setChecked()
.
Então, há uma maneira de fazer o que eu quero em XML ou estou preso com minha solução alternativa complicada?
fonte
CompoundButton
.CompoundButton
é abstrato!Respostas:
Seu código está bom. No entanto, o botão de alternância exibirá o primeiro item em seu seletor que corresponda, portanto, o padrão deve vir por último. Organize os itens da seguinte maneira para garantir que todos sejam utilizados:
fonte
switch
selecionaria sempre o "correto", independentemente da ordem, ele se comporta mais como um prolongadoif-elseif-elseif-else
com condições comostate_x == true && state_y == false && state_z = true
.