2012-03-14 19 views
3

画像の透明度を持つ画像ソースを持つ画像ボタンがありますが、画像ボタンの背景色は灰色のボタン色です。@null背景(透明)のimagebutton

私は背景を設定する必要があります= @ nullとこれはうまく動作します。

しかし、この画像ボタンを押すと、ボタンを押していることを示す色が表示されません。

ボタンを押したときにbackground = @nullを削除すると、押していることを知っているユーザーの色を変更します。

ボタンが押されたとき、この通常時とフォーカスがあるときを指定する3つの画像でxmlを作成できることを読んだ。しかし、私はより簡単な方法が存在すると思います。

+0

多分あなたは '3つの画像で... 'と言った方が良い考えです。 – idiottiger

+0

私は各ボタンの2つまたは3つのイメージを作成する必要がありますか? – thenosic

+0

'selector 'を使用して異なる時間を定義すると、各ボタンに2つまたは3つの画像も使用されます。 – idiottiger

答えて

13

におけるボタンの使用android:background="#1000"、背景用セレクタドロウアブルを(使用を記載されていますnullの代わりに)デフォルトの状態が透明な色に設定されています。

* select or_with_transparency:*押され

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:state_pressed="true" android:drawable="@drawable/pressed" /> 
    <item android:drawable="@drawable/transparent" /> 

</selector> 

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 

    <solid android:color="#0077cc" /> 

</shape> 

透明:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <solid android:color="#00000000"/> 

</shape> 

、その後ImageButton用:

background = "@drawable/selector_with_transparency" 
+0

ありがとう!それは完璧に動作します;) – thenosic

+1

これは素晴らしい作品です、ありがとう!それはICSの '?android:attr/selectableItemBackground'のように振る舞います。 – nobre

2

あなたが好きではないため、背景を削除しました。 state listを使用する背景は、タッチする方法によっては、自分で3つの画像を使用しないでください。言い換えれば、あなたはボタンが押されたことを表示せず、あなたはそれを行う必要があります。その後、3枚の画像を使用します。あなたが持っているイメージを使用して、それがフォーカスされ、押されたことを示す2つの他のイメージを作成してください。

例: main.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Button 
     android:id="@+id/btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/background_color"/> 

background_color.xml

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_pressed="true" 
      android:drawable="@drawable/button_pressed" /> 
     <item android:state_focused="true" 
      android:drawable="@drawable/button_focused" /> 
     <item android:drawable="@drawable/button_normal" /> 
    </selector> 

それは本当にちょうどあなたの描画可能なフォルダにそのXMLファイルを入れて、信じられないほど簡単です。 (res/drawable)

+0

良い答え、ありがとう! – thenosic

1

デフォルトでは、アンドロイドはユーザーが明示的に背景を設定するまで、背景としてR.drawable.button_default(button.default.xml)を使用します。 セレクタを作成することをお勧めします。同様のことは、AndroidのSDKに

button_default.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" android:state_enabled="true" 
     android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_window_focused="false" android:state_enabled="false" 
     android:drawable="@drawable/btn_default_normal_disable" /> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/btn_default_pressed" /> 
    <item android:state_focused="true" android:state_enabled="true" 
     android:drawable="@drawable/btn_default_selected" /> 
    <item android:state_enabled="true" 
     android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_focused="true" 
     android:drawable="@drawable/btn_default_normal_disable_focused" /> 
    <item 
     android:drawable="@drawable/btn_default_normal_disable" /> 
</selector> 
0

上記回答以下のXML