透明なImageButtonの作成方法:Android


493
<ImageButton android:id="@+id/previous"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/media_skip_backward"
android:background="@drawable/transparent"></ImageButton>

これは、これらのボタンをSurfaceViewに配置するために透明なImageButtonを取得しようとしたものです。しかし、Eclipseでは、透明な行をxmlに含めるとすぐにプロジェクトでエラーが発生します。

助けてください。


3
補足:独自の透明画像の代わりに、@ android:color / transparentを使用することもできます。独自のカスタム透明画像は必要ありません
Mathias Conradt

6
画像ボタンを透明な背景にすると、ボタンがクリックされた(おそらく無効になっている)状態の視覚的なフィードバックが削除されます。これにより、ユーザビリティがわずかに低下します。
szeryf 2013年

ImageButtonが実際にSurfaceViewに配置されていることを確認するには、previousButton.bringToFront()を呼び出すことも役立ちます。そうでない場合は、SurfaceViewの背後に非表示になっている可能性があります
Jay Snayder

Android APIは、ボタンのクリックやその他の状態の視覚的フィードバックを失うことなく透明な背景を作成するための正しい属性を提供します!以下の私の答えを読んでください!
lory105 2013年

回答:


984

背景にnullを使用してみてください...

android:background="@null"

ありがとうございました。これは機能します。画像のみが表示され、周囲のボックスは表示されません。しかし、このボタンをSurfacaViewの上、つまりビデオプレビューの上に置くことはできますか?これは可能ですか?どうすればいいのですか?
Namratha

1
@NamrathaこれSurfaceViewにより、表面上にボタンを固定できるようになりますが、次のことに注意してください。コンポジットは、サーフェスが変更されるたびに実行されます。」developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson

57
ヌル背景を使用するのは正しくありません!! Android APIは、ボタンのクリックやその他の状態の視覚的フィードバックを失うことなく透明な背景を作成するための正しい属性を提供します!以下の私の答えを読んでください!
lory105 2013年

1
上記および下記のとおり、ボタンの背景をnullに設定することはお勧めできません。適切な属性を使用した回答の方がはるかに優れています。または、クリックされなかった場合の適切なフィードバックと、クリックされた場合の適切なフィードバックに対して透明な正しいセレクターを作成します。
Damian Walczak 2014年

それは私にエラーを与えました..しかし、これは私のために働きましたandroid:background = "@ android:color / transparent"
フアンメンデス

303

ボタン(または汎用ビュー)がクリック時にハイライト表示されなくなるため、透過的またはNULLレイアウトを使用しないでください!!!

私は同じ問題を抱えていて、最後にAndroid APIから正しい属性を見つけて問題を解決しました。どのビューにも適用できます。

これをボタンの仕様で使用します。

android:background="?android:selectableItemBackground"

4
これにはAPI 11が必要です。実際の電話の24%を排除します(2014年1月現在)
Shaun Neal

8
サポートライブラリを使用すると、API> = 11の要件は、stackoverflow.com
Someone Somewhere

15
ラウンド波及効果については、使用android:background="?android:selectableItemBackgroundBorderless"
マテウスGondim

7
幸いにも、2019年の時点で、これにより、実際に使用されている電話の約0%が排除されます。
user1032613

140

透明色を使用することもできます。

android:background="@android:color/transparent"

9
@ Geykel、@ Adam、この属性を無条件に使用すると、画面に描画される別の透明なレイヤーが追加され、ピクセルがオーバードローし、アプリケーションの速度が低下する可能性があるため、この属性は非常に危険です。これをテストするには、を使用してDeveloper option: Show GPU overdraw、背景を@nullとに設定した場合の違いを確認し@android:color/transparentます。
amirlazarovich 2013年

これが最良かつ最も効果的な答えです。:)
ファン・メンデス2017年

112

背景をに設定"@null"すると、ボタンをクリックしても何も起こりません。これはより良い選択です。

style="?android:attr/borderlessButtonStyle"

後で私はそれを使ってそれを見つけました

android:background="?android:attr/selectableItemBackground"

も良い解決策です。また、この属性を独自のスタイルで継承できます。


私にとってはうまくいきませんでしたし、2つ目はアプリをクラッシュさせました。たぶん、私は間違っていましたが、私は何を知りません。
Yannis Dran 2013

5
APIレベル11が必要です。ソース
Jason Robinson

2
これが正解です。また、AppCompactを使用すると、この回答で波及効果は完全に機能し、api 19では通常の押された効果がそのまま機能します。android:background = "?android:attr / selectableItemBackground"すばらしい!
Raffaeu、2015年

このソリューションにselectableItemBackgroundは、ボタンをクリックすると状態が変化するという追加の利点があります。他のソリューションでは、ボタンがクリックできないように見えます。
IgorGanapolsky 2015年

14

実行時には、次のコードを使用できます

btn.setBackgroundDrawable(null);

8
btn.setBackgroundColor(Color.TRANSPARENT); すべてのAPIレベルで動作します
AlBeebe 2013

setBackgroundDrawableは廃止予定です。setBackGroundColorを使用して、上記のAlBeebeで提案されているように
bhaskarc

このメソッドは非推奨になりました
Ray Kiddy

11

受け入れられた答えは次のとおりであると思います。 android:background="?attr/selectableItemBackground"

これは@ lory105の回答と同じですが、サポートライブラリを使用して最大の互換性を実現しています(android:同等のものはAPI> = 11でのみ使用できます)。


8

この行を削除します。

android:background="@drawable/transparent">

そしてあなたの活動クラスセットで

ImageButton btn = (ImageButton)findViewById(R.id.previous);
btn.setAlpha(100);

アルファレベル0〜255を設定できます。

oは透明、255は不透明を意味します。


しかし、これにより、ボタンをSurfaceViewの上に配置できますか?
Namratha

5
この答えは間違っており、誤解を招きます。ボタン全体が半透明になります。コードからこれを行う場合は、nullをsetBackgroundメソッドに渡します。setAlphaは必要なものではありません。
Quintin Willison、2011

ビュー全体が透明になります。
Raj

5

最善の方法は、透明なカラーコードを使用することです

android:background="#00000000"

物を透明にするには、カラーコード#00000000を使用します


4
@android:color/transparentハードコードされた値なし。
Fred

1
いいえ、参照値を優先する必要があります...しかし、IMO、@ Fred、@android:レイアウトに直接参照を配置する場合でも、ハードコードされた値とみなされます。私はこのようなものを宣言し<item name="something">@android:color/transparent</item>、レイアウトで独自の値を使用するので、resources.xmlファイルで簡単に見つけて、レイアウトで検索する必要なく変更できます
Cliff Burton

2

使用ImageView...それはデフォルトで透明な背景を持っています...


3
しかし、それはボタンではありません
Moesio

2
ImageViewをボタンとして使用できます。Javaコードでは、ImageView previous =(ImageView)findViewById(R.id.previous);と言うだけです。そして、previous.setOnClickListener(new OnClickListener {public void onClick(/ * this when you touch the ImageView * /)}); 出来上がり!
marienke 2013年

2

私はすでに背景に何かを追加していたので、これでうまくいきました:

   android:backgroundTint="@android:color/transparent"

(Android Studio 3.4.1)

編集:Android APIレベル21以上でのみ機能します。互換性のために、代わりにこれを使用してください

   android:background="@android:color/transparent"

1

これを使って:

<ImageButton
 android:id="@+id/back"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@null"
 android:padding="10dp"
 android:src="@drawable/backbtn" />

1

XMLでImageButtonの背景を@nullに設定します。

<ImageButton android:id="@+id/previous"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/media_skip_backward"
android:background="@null"></ImageButton>

1

"@null"を使用します。それは私のために働いた。

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/bkash"
    android:id="@+id/bid1"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:background="@null" />

1

それは android:background="@android:color/transparent"

<ImageButton
    android:id="@+id/imageButton"
    android:src="@android:drawable/ic_menu_delete"
    android:background="@android:color/transparent"
/>

0

これはプログラムで背景色を透明に設定します

 ImageButton btn=(ImageButton)findViewById(R.id.ImageButton01);
 btn.setBackgroundColor(Color.TRANSPARENT);

0

プログラム的には、次の方法で実行できます。

image_button.setAlpha(0f) // to make it full transparent
image_button.setAlpha(0.5f) // to make it half transparent
image_button.setAlpha(0.6f) // to make it (40%) transparent
image_button.setAlpha(1f) // to make it opaque

私はダウンボーターではありませんが、背景だけでなく画像全体が透明になっているようです。
Trevor

@threed私は知っています、そしてそれはまさにOPが彼の質問、「透明なImageButton」に尋ねていることです。
Muhammed Refaat 2016

1
完全に正しい、OPは透明なボタンを求めました。しかし、彼の例は、背景が透明なボタン(たとえばandroid:background="@drawable/transparent")を要求するつもりだった可能性があることを示唆しています。どちらにせよ、私は反対票の考えられる理由を提案しているだけです。それが正当であると言っているのではありません。
Trevor 2016

1
@threedまあ、それが理由だったのかもしれませんが、とにかくありがとうございました。
Muhammed Refaat 2016年

0

XMLで、Background属性を任意の色のWhite(#FFFFFF)濃淡に設定します。Black(#000000)透明度が必要な場合は、実際のハッシュコードの前に80を追加します。

#80000000   

-2
<ImageButton
    android:id="@+id/previous"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/media_skip_backward">
</ImageButton>

私は透明の使用pngのためにImageButton、とImageButton働きました。


これは良い解決策ではありません。AndroidAPIが提供する正しい属性を使用してください!私のアンスウェアを読んでください。
lory105 2013年

これにより、別のレイヤーが作成され、オーバードローが追加されます。
tir38 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.