デフォルトの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"/>
_
これで、クリック/非クリック状態に使用する2つの30 x 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));
}
}
});
_
明らかに私はこれを行うためのより良い方法を探しています。背景画像のセレクターを作成しようとしました。これにより、状態が自動的に切り替わります。
_ <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 )を読み取ると、継承された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.
_
クラスにはメソッドisChecked()
およびsetChecked()
がありますが、Android:state_checked属性はないようです。
それで、私がXMLでやりたいことをする方法はありますか、それとも面倒な回避策に固執していますか?
コードは問題ありません。ただし、トグルボタンは一致するセレクタの最初の項目を表示するため、デフォルトが最後に来るはずです。次の方法でアイテムを配置して、それらがすべて使用されるようにします。
<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>