3

如何创建一个没有边框的 ImageButton(只是图像应该是可见的)?可以通过设置来实现这一点imageButton.setBackgroundDrawable(null),但这也会删除焦点和选择颜色。

目标是最初只有没有边框的图像是可见的。但是当用户聚焦/触摸/单击图像时,应该通过像常规按钮一样突出显示图像来指示。

首选 API 14 的 Java-Code 解决方案。谢谢!

4

7 回答 7

13

如前所述,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);

此版本为要使用的小部件提供不同的默认样式属性。

于 2013-06-20T15:05:46.383 回答
7

对 ImageButton使用无边框按钮样式

 <ImageButton
        style="?android:borderlessButtonStyle"
        android:layout_width="58dp"
        android:layout_height="wrap_content"
        android:contentDescription="Delete"
        android:src="@android:drawable/ic_delete" />

参考 : Google I/O 2013 - UI 开发者的 Android 设计

于 2013-06-20T05:39:49.957 回答
6

使用这样的背景选择器

/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是你的真实形象。

于 2013-06-10T15:40:45.390 回答
3

您的答案在 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 上具有相同的行为,那么您将不得不坚持使用选择器。

顺便说一句,我强烈建议您观看整个演讲,因为它真的很有趣。

于 2013-06-18T10:39:28.547 回答
0

你必须添加

imageButton.setClickable(true);
imageButton.setFocusable(true);

它会起作用......

这就是您的 xml 文件中的方式:

android:clickable="true"
android:focusable="true"

希望这有帮助

于 2013-06-10T15:35:44.960 回答
0

我希望这能帮到您。请给背景透明

<ImageButton 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/facebookbuttonanimation"
            android:background="#00000000"

            />
于 2013-06-18T13:21:04.140 回答
0

您可以为单击/未单击状态设计不同的图像,并将它们设置在 onTouchListener 中,如此SO 帖子的选定答案所示。

然后,您可以在长按或单击后将图像设置回上一个图像。

于 2013-06-20T17:13:32.640 回答