2009-10-07 10 views
98

デフォルトのToggleButtonの外観を上書きしようとしています。ここでToggleButton定義するXMLです:今Android:XMLを使用してトグルボタンに2つの異なる画像を指定してください。

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

をしかし、これは動作しません。方法isChecked()setChecked()を持つクラスにもかかわらず、state_checked属性: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. 

あることが表示されますアンドロイドがあるように思えません。

私はXMLで必要なことをする方法があるのでしょうか、面倒な回避策が残っていますか?

+0

テキストを使用していない場合は、「CompoundButton」を使用する方が良いかもしれないことに注意してください。 – Timmmm

+1

これを無視してください。 'CompoundButton'は抽象です! – Timmmm

答えて

159

コードは問題ありません。しかし、トグルボタンは、一致するセレクタの最初の項目を表示するので、デフォルトは最後になるはずです。

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

これは完璧な意味合いがあります。私はセレクタとスイッチのステートメントの間に決して接続しませんでした。 – I82Much

+0

あなたは私の一日を作った...私はボタン、チェックボックスと問題を抱えてラジオボタンを試みたが、最終的にこのポストは役に立ちました。 Vitaly PolonetskyとI82Much –

+0

あなたのチップが本当に助けてくれてありがとう。どうもありがとう。 – anticafe

関連する問題