Android:使用XML为togglebutton指定两个不同的图像

我试图重写默认的ToggleButton外观。 这里是定义ToggleButton的XML:

 <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"/> 

现在,我们有两个30×30的图标,我们想用于点击/非点击状态。 现在我们有代码,根据状态编程改变背景图标:

 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)); } } }); 

很明显,我正在寻找一个更好的方法来做到这一点。 我试图做一个select器的背景图像,这将自动切换状态之间:

  <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 --> 

但是这是行不通的。 阅读ToggleButton API( http://developer.android.com/reference/android/widget/ToggleButton.html ),看来只有inheritance的xml属性是

  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. 

尽pipe类有方法isChecked()setChecked() ,但似乎并没有android:state_checked属性。

那么,有没有办法做到我想要的XML,或者我坚持我的凌乱的解决方法?

你的代码很好。 但是,切换button将显示匹配的select器中的第一个项目,所以默认应该最后一个。 以下列方式排列项目,以确保它们全部被利用:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:state_pressed="true" /> //currently pressed turning the toggle on <item android:state_pressed="true" /> //currently pressed turning the toggle off <item android:state_checked="true" /> //not pressed default checked state <item /> //default non-pressed non-checked </selector>