2011-08-09 25 views
3

私のdrawable xmlファイルのカラーセレクタが尊重されないような問題が発生しています。私は、以下を含むレイアウトを持っている:Android - 図形xmlから参照されるColorStateList xmlの問題

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/filter_button_color" /> 
    <corners 
    android:bottomLeftRadius="0dp" 
    android:topLeftRadius="5dp" 
    android:topRightRadius="0dp" 
    android:bottomRightRadius="5dp"/> 
</shape> 

と色の\ filter_button_color.xmlは次のとおりです:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
    android:color="@color/myred" 
    android:state_checked="true"/> 
    <item 
    android:color="@color/myblue" 
    android:state_checked="false"/> 
</selector> 

(myredとmyblueで定義されているよう

<LinearLayout 
    android:layout_height="wrap_content" 
    android:id="@+id/sortLayout" 
    android:layout_width="fill_parent" 
    android:gravity="center" 
    android:background="@color/listSortBarBackground" android:orientation="vertical"> 
    <ToggleButton 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:checked="true" 
     android:background="@drawable/filter_button_left"/> 
    <ToggleButton 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:checked="false" 
     android:background="@drawable/filter_button_left"/> 
</LinearLayout> 

描画可能の\のfilter_button_left.xmlに見えますcolors.xml)

ボタンがレンダリングされ、適切なチェックスタンドが取得されていることがわかります最初のものはテキスト "ON"で表示され、2番目のものは "OFF"で表示されているので、両方のボタンがその背景として形状を取得しますが、いずれの場合も形状の色はマイレッドです。私はfilter_button_color.xmlセレクタの項目を反転させて遊んでいました。セレクタ項目の実際の状態や状態にかかわらず、常に上の色が使用されているようです。

これがうまくいかない理由を誰にでも見られますか?

ありがとうございます! Scott

答えて

3

あなたの問題は、あなたが間違った方向にxml drawableを持っていることだと思います。
ToggleButtonレイアウトのセレクタFIRSTを参照し、セレクタレイアウト内に2つのドロワブルを配置する必要があります。
例ToggleButton - >セレクタ(2つの状態) - >シェイプ。
これはうまくいくはずです(そして1つ少ないxmlファイルを作ってください)。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true"> 
     <shape> 
      <solid android:color="@color/myred"/> 
      <corners 
       android:bottomLeftRadius="0dp" 
       android:topLeftRadius="5dp" 
       android:topRightRadius="0dp" 
       android:bottomRightRadius="5dp"/> 
     </shape> 
    </item> 
    <item android:state_checked="false"> 
     <shape> 
      <solid android:color="@color/myblue"/> 
      <corners 
       android:bottomLeftRadius="0dp" 
       android:topLeftRadius="5dp" 
       android:topRightRadius="0dp" 
       android:bottomRightRadius="5dp"/> 
     </shape> 
    </item> 
</selector> 
+0

(これはあなたのために働く場合は受理として、upvoteおよびまたはマークしてください) –

+0

私は(二つの異なる形状のxmlファイルとの間で選択する描画可能セレクタに元のレイアウト点を有することで、私はそれを動作させることができることを見ていますaはColorStateListの代わりに特定の色でチェックされ、チェックされていない)。それはあなたが念頭に置いていることですか?私はその解決策が1つではなく、もう1つのxmlファイルになるので混乱しています。また、2つの形状のxmlファイルが角の半径の設定を複製し、両方の場所で変更を管理する必要があるため、実装しようとしていたものよりやや厄介なようです。どんなイベントでも動作しますので、ありがとう! – Scott

+0

ええと、少なくとも2つのxmlファイルの合計が必要になると思います(左右のドロアブルは異なると仮定しています)。残念ながら、drawableの半径部分を2回定義する必要があるのはちょっと難しいですが、周りに道が見えません。 –

関連する問題