web-dev-qa-db-ja.com

背景が透明でクリック時にImageButtonが強調表示されない

ImageButtonを透明に設定したので、アイコンはAndroid ActionBarのようなbackgrondパネルと一致します。これは私が望んでいるように見えます。

ただし、背景が透明な場合、アクションバーの透明なボタンを押したときのような青みがかったハイライトはありません。

透明で、クリックするとハイライトが点滅するImageButtonを使用できますか?

<ImageButton
    Android:id="@+id/nextItemButton"
    style="?android:attr/buttonStyleSmall"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentRight="true"
    Android:layout_alignParentTop="true"
    Android:background="@null"
    Android:src="@drawable/ic_media_ff" />
39
Stealth Rabbi

必要なことは、適切な背景を設定することだけです。あなたがそれが通常の状態で透明であり、押された状態で青みがかった場合。

res/drawableディレクトリにこのような StateListDrawable を作成します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@color/my_bluish_color" Android:state_pressed="true"/>
    <item Android:drawable="@Android:color/transparent"/>
</selector>

これにより、デフォルトの背景が透明になります。押すと、背景は指定した色になります(色の代わりに、ここで任意のドロウアブルを使用できます)。

37
Tomik

この同じ問題に出くわしました。最後に、その属性を持つコードのサンプルを入手しました。

Android:background="?android:selectableItemBackground"

この属性は、任意のビュー(ボタン、ImageButton、TextView ...)を選択可能なハイライトで透明な背景にしますWITHOUT OUT MODING !!!

128
Fernandez

フェルナンデスの良い答えを追加するだけです:

効果を長方形ではなく丸みにしたい場合:

Android:background="?android:selectableItemBackgroundBorderless"    

(* V21以降)。

5
Udi Reshef

プログラムで実行したい場合は、次の解決策があります。

カスタムImageButtonクラスを作成し、drawableStateChange()をオーバーライドします。

public class CustomImageButton extends ImageButton {

    @Override
    protected void drawableStateChanged() {
        Log.d("Button", "isPressed: " + isPressed() );
        if( isPressed() ){
            setBackgroundResource( Android.R.color.holo_blue_dark );
        }  else {
            setBackgroundResource( Android.R.color.transparent );
        }
        super.drawableStateChanged();

    }

    public CustomImageButton( Context context ) {
        super( context );
    }

    public CustomImageButton( Context context, AttributeSet attrs ) {
        super( context, attrs );
    }

    public CustomImageButton( Context context, AttributeSet attrs, int defStyle ) {
        super( context, attrs, defStyle );
        // TODO Auto-generated constructor stub
    }



}
2
Wenhui