selector-xml-fileを使用してボタンの背景色を変更したい。私のアプローチは、基本的にこのページの下部にある例のアプローチです。 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を作成したくない(基本的に「クリック可能な」長方形が必要なため、色付きの背景のボタンを使用します)
エラーの状態に応じて、アイテムのdrawable attibuteを定義する必要があります(バックグラウンド定義に関しては何らかの理由で必要です)。
<?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属性は生の色の値を受け入れないため、色をリソースとして定義する必要があることに注意してください。 colors.xmlファイルを作成しますres/valuesフォルダー:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#000</color>
<color name="blue">#00f</color>
<color name="red">#f00</color>
</resources>
あなたがポイントした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"/>
お役に立てれば。 Vikは正しいです。
編集:ここに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>
Selector.xmlファイルを描画可能フォルダーに配置する必要があります。次に、Android:background="@drawable/selector"
と書きます。これにより、押された状態とフォーカスされた状態が処理されます。
mono Androidでは、次のようなフィルターを使用できます。
your_button.Background.SetColorFilter(new Android.Graphics.PorterDuffColorFilter(Android.Graphics.Color.Red, Android.Graphics.PorterDuff.Mode.Multiply));