web-dev-qa-db-ja.com

Android:XMLを使用してトグルボタンに2つの異なる画像を指定します

デフォルトの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 AP​​I( 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でやりたいことをする方法はありますか、それとも面倒な回避策に固執していますか?

99
I82Much

コードは問題ありません。ただし、トグルボタンは一致するセレクタの最初の項目を表示するため、デフォルトが最後に来るはずです。次の方法でアイテムを配置して、それらがすべて使用されるようにします。

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