web-dev-qa-db-ja.com

Android異なる背景色のボタン

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を作成したくない(基本的に「クリック可能な」長方形が必要なため、色付きの背景のボタンを使用します)

35
Daniel

エラーの状態に応じて、アイテムの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>
81

あなたがポイントした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>
28
Sreeram

Selector.xmlファイルを描画可能フォルダーに配置する必要があります。次に、Android:background="@drawable/selector"と書きます。これにより、押された状態とフォーカスされた状態が処理されます。

4
Vik

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

your_button.Background.SetColorFilter(new Android.Graphics.PorterDuffColorFilter(Android.Graphics.Color.Red, Android.Graphics.PorterDuff.Mode.Multiply));
2
ovnis