回答:
より良い結果のために:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_button"
android:background="?attr/selectableItemBackgroundBorderless"
/>
android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
(<API 21で動作します)。他のソリューションについては、stackoverflow.com / q / 28605031/599535をご覧ください。
次のようにImageButtonに背景を追加するだけです。
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_dialog"
android:background="?android:attr/selectableItemBackground" />
i.shadrin(こちら)とNicolars(こちら)から良い回答を得ました。
彼らの答えの違いはそれ?attr/selectableItemBackgroundBorderless
があなたにを与えることができるということですandroid.view.InflateException
ので、それ?android:attr/selectableItemBackground
が解決策です。
FWIW、なぜ例外が発生するのかわかりません。最初の答えはすべての古いプロジェクトでうまくいきましたが、最近のプロジェクトではうまくいきませんでした(おそらくアプリのテーマ= android:Theme.Material
?が原因です)。
起こっていた奇妙なことは、波及効果が示されていても、それがImageButtonの境界を超えているため、解決策は次のとおりです。
android:foreground="?android:attr/selectableItemBackgroundBorderless"
代わりに使用するにはandroid:background="?android:attr/selectableItemBackgroundBorderless"
あなたが同じことに直面している場合、それがあなたを助けることを願っています。
背景がすでにあり、それを変更したくない場合は、前景を使用します。
<ImageButton
android:layout_width="60dp"
android:layout_height="match_parent"
android:background="@drawable/preview_in_4k_background"
android:src="@drawable/ic_full_screen_24px"
android:layout_marginLeft="5dp"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:layout_column="2"/>