2012-12-31 22 views
5

私は、ドロアブルとテキストを含むボタンを持っています。私はボタンの背景が通常のものとは異なるもの(好ましくは普通の色)にしたい。これはうまくいきます、私は単純にXMLファイルのandroid:background属性を使用し、それに応じて色を割り当てます。しかし、私は背景が選択または焦点を当てると(状態セレクタ)、別の色に変更したい。カスタムボタンの状態の背景色を設定する方法は?

私はそうのように、(ボタンのテキストを扱うときに適しています)定義された色で描画可能なフォルダにセレクタを作成しようとしました:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_focused="true" android:state_pressed="false" android:color="@color/green" /> 
     <item android:state_focused="true" android:state_pressed="true" android:color="@color/green" /> 
     <item android:state_focused="false" android:state_pressed="true" android:color="@color/green" /> 
     <item android:color="@color/white" /> 
    </selector> 

android:background属性としてこのXMLを設定します、そのよう:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/button_state.xml from drawable resource ID #0x7f020070 

android:background="@drawable/button_state" 

が、これは力が近い旨の原因となります

しかしリソースはそこにあります。背景の状態をカスタマイズすることはできませんか?できるなら、どう?私は間違って何をしているのですか?助けてくれてありがとう!

+1

セレクタをバックグラウンドドロアブルとして使用することは間違いありません。どこに 'button_state.xml'を置いたのですか? –

+0

私はしばしば行うように、それをドロウアブルフォルダに配置しました。そして起動時にアプリの強制が終了するので、xmlファイル – chRyNaN

+0

を認識してはならないか、おそらくxmlファイルを認識しません。なぜなら、textColor属性で使用するとうまく動作するからです。バックグラウンドアトリビュートを使用して強制的に閉じるときのみ – chRyNaN

答えて

10

あなたが投稿したxmlは、color state listに適していて、状態リストの描画可能なものではありません。

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:state_pressed="false" > 
     <shape><solid android:color="@color/green"/></shape> 
    </item> 
    . . . 
</selector> 

はまた、 res/colorにあなたの既存のファイルを入れて、あなたが他の色と同じように、それを使用します。代わりにこれを試してみてください。しかし、色の状態リストをビューの背景として直接使用できるかどうかはわかりません。

+0

これは正しく動作することを理解しています:状態セレクタを 'button'のバックグラウンドに使用する場合、セレクタxmlで定義されたバックグラウンドリソースは'ドロアブル? – chRyNaN

+2

@AndroidStudent - まさに。状態リストドロアブルとカラー状態リストの間には大きな違いがあります(Androidの内部では違いがあります)。描画可能状態リストは、他の描画可能オブジェクトのみを参照する必要があります。 APIは、描画可能な参照が必要な場合にカラー参照を使用できるように見えるため、少し混乱しますが、それはどこでもうまくいきません。 –

+0

ああ、本当にありがとう、本当にありがとう! – chRyNaN

2

例:カラー/ BUTTON_TEXT

のres /カラー/ button_text.xml

@

XML file saved at res/color/button_text.xml: 

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_pressed="true" 
       android:color="#ffff0000"/> <!-- pressed --> 
     <item android:state_focused="true" 
       android:color="#ff0000ff"/> <!-- focused --> 
     <item android:color="#ff000000"/> <!-- default --> 
    </selector> 
    This layout XML will apply the color list to a View: 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/button_text" 
     android:textColor="@color/button_text" /> 

これはColorStateListリソースにGoogleが提供する例です。 https://developer.android.com/guide/topics/resources/color-list-resource.html

私はcolorStateListは、ウィジェットのtextViewの色を変更するために使用する必要がありますと思う。

関連する問題