如何创建一个没有边框的 ImageButton(只是图像应该是可见的)?可以通过设置来实现这一点imageButton.setBackgroundDrawable(null)
,但这也会删除焦点和选择颜色。
目标是最初只有没有边框的图像是可见的。但是当用户聚焦/触摸/单击图像时,应该通过像常规按钮一样突出显示图像来指示。
首选 API 14 的 Java-Code 解决方案。谢谢!
如何创建一个没有边框的 ImageButton(只是图像应该是可见的)?可以通过设置来实现这一点imageButton.setBackgroundDrawable(null)
,但这也会删除焦点和选择颜色。
目标是最初只有没有边框的图像是可见的。但是当用户聚焦/触摸/单击图像时,应该通过像常规按钮一样突出显示图像来指示。
首选 API 14 的 Java-Code 解决方案。谢谢!
如前所述,borderlessButtonStyle
在 API11 及以上版本的默认主题中内置是实现此效果的最简单方法。您提到您正在使用 Java 代码而不是 XML 创建按钮,因此有两个选项取决于您需要如何应用样式。
选项 #1:将其添加到主题
如果您的应用程序(或至少在 Activity 中)中的所有Button
或实例都需要应用此样式,请将样式添加到您的主题中:ImageButton
<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light">
<!-- Default style for ImageButtons -->
<item name="android:imageButtonStyle">?android:borderlessButtonStyle</item>
<!-- Default style for Buttons -->
<item name="android:buttonStyle">?android:borderlessButtonStyle</item>
</style>
</resources>
将此主题应用于您的应用程序或活动后,您无需声明每个元素的样式,只需将它们声明为
Button button = new Button(context);
ImageButton imageButton = new ImageButton(context);
并且样式将从主题中提取。
选项 #2:在构造函数中声明它
如果只有几个按钮需要以这种方式设置样式,则可以将要应用的样式属性直接传递给每个视图,如下所示:
Button button = new Button(context, null, android.R.attr.borderlessButtonStyle);
ImageButton imageButton = new ImageButton(context, null, android.R.attr.borderlessButtonStyle);
此版本为要使用的小部件提供不同的默认样式属性。
对 ImageButton使用无边框按钮样式
<ImageButton
style="?android:borderlessButtonStyle"
android:layout_width="58dp"
android:layout_height="wrap_content"
android:contentDescription="Delete"
android:src="@android:drawable/ic_delete" />
使用这样的背景选择器:
/res/drawable/my_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/my_drawable" />
<item android:drawable="@android:color/transparent" />
</selector>
my_drawable
是您想要作为边框的任何可绘制对象。
然后你的ImageButton
<ImageButton
android:layout_height="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/my_selector"
android:src="@drawable/your_bitmap" />
your_bitmap
是你的真实形象。
您的答案在 Nick Butcher 和 Roman Nurik 为 Google I/O 2013 举办的关于 UI 开发人员的 android 设计的演讲中。
分钟:31:40:
https://www.youtube.com/watch?v=Jl3-lzlzOJI#t=31m40s
这种方法的唯一问题是它style="?android:borderlessButtonStyle"
适用于 API 11 及更高版本,因此如果您希望在 11 之前的任何 API 上具有相同的行为,那么您将不得不坚持使用选择器。
顺便说一句,我强烈建议您观看整个演讲,因为它真的很有趣。
你必须添加
imageButton.setClickable(true);
imageButton.setFocusable(true);
它会起作用......
这就是您的 xml 文件中的方式:
android:clickable="true"
android:focusable="true"
希望这有帮助
我希望这能帮到您。请给背景透明
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/facebookbuttonanimation"
android:background="#00000000"
/>
您可以为单击/未单击状态设计不同的图像,并将它们设置在 onTouchListener 中,如此SO 帖子的选定答案所示。
然后,您可以在长按或单击后将图像设置回上一个图像。