39

セレクター xml ファイルを使用してボタンの背景色を変更したいと考えています。私のアプローチは基本的に、このページの下部にある例からのものです: http://developer.android.com/guide/topics/resources/color-list-resource.html

次のような 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>

私のレイアウトには次のコードが含まれています:

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

(** は、android:textcolor の代わりに android:background を使用していることを示すためだけに存在します)

このコードはクラッシュします。「バイナリ XML ファイルの 4 行目のタグには、「drawable」属性または drawable を定義する子タグが必要です。しかし、上記のリンクで説明されているように android:textColor で試してみると、問題なく動作します。したがって、背景の問題である必要があります。必要がない場合は 9patch-png を作成したくありません (基本的には「クリック可能な」長方形が必要なだけなので、色付きの背景のボタンを使用します)

4

4 に答える 4

85

エラーが示すように、アイテムの描画可能な属性を定義する必要があります(何らかの理由で、背景の定義に関しては必要です)。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/red"/> <!-- pressed -->
    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
    <item android:drawable="@color/black"/> <!-- default -->
</selector>

また、drawable属性は生の色の値を受け入れないため、色をリソースとして定義する必要があることに注意してください。res/valuesフォルダーにcolors.xmlファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <color name="black">#000</color>
     <color name="blue">#00f</color>
     <color name="red">#f00</color>
</resources>
于 2010-09-18T04:11:47.517 に答える
30

あなたが指摘したURLでは、button_text.xmlを使用してtextColor属性を設定しています.res/colorフォルダーにbutton_text.xmlがあり、@color/button_text.xmlを使用したのはそのためです

しかし、背景属性に使用しようとしています。background 属性は res/drawable フォルダー内の何かを探します。

これを確認してください。このセレクターのカスタムボタンをインターネットから入手しました。リンクはありませんが、ポスターに感謝します。ドローアブルフォルダーにこれを入れるのに役立ちました

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <gradient
                android:startColor="@color/yellow1"
                android:endColor="@color/yellow2"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item android:state_focused="true" >
        <shape>
            <gradient
                android:endColor="@color/orange4"
                android:startColor="@color/orange5"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>        
        <shape>
            <gradient
                android:endColor="@color/white1"
                android:startColor="@color/white2"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

</selector>

そして、私はこのように私のmain.xmlレイアウトで使用しました

<Button android:id="@+id/button1"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="150dip"
            android:layout_marginLeft="45dip"
            android:textSize="7pt"
            android:layout_height="wrap_content"
            android:layout_width="230dip"
            android:text="@string/welcomebtntitle1"
            android:background="@drawable/custombutton"/>

お役に立てれば。ヴィクは正しいです。

編集:ここにcolors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="yellow1">#F9E60E</color>
   <color name="yellow2">#F9F89D</color>
   <color name="orange4">#F7BE45</color>
   <color name="orange5">#F7D896</color>
   <color name="blue2">#19FCDA</color>
   <color name="blue25">#D9F7F2</color>
   <color name="grey05">#ACA899</color>
   <color name="white1">#FFFFFF</color>
   <color name="white2">#DDDDDD</color>
</resources>
于 2011-08-25T05:52:35.617 に答える
2

Mono Android では、次のようにフィルターを使用できます。

your_button.Background.SetColorFilter(new Android.Graphics.PorterDuffColorFilter(Android.Graphics.Color.Red, Android.Graphics.PorterDuff.Mode.Multiply));
于 2012-03-08T20:03:05.150 に答える