Android ImageButton没有边框但仍然有点击指示

时间:2013-06-10 15:28:10

标签: android android-layout imagebutton

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

目标是最初只能看到没有边框的图像。但是当用户聚焦/触摸/点击图像时,应通过高亮显示图像来指示,如常规按钮。

首选API 14的Java代码解决方案。谢谢!

7 个答案:

答案 0 :(得分:13)

如前所述,API11及更高版本的默认主题中内置的borderlessButtonStyle是实现此效果的最简单方法。您提到使用Java代码而不是XML创建按钮,因此根据您需要应用样式的方式,有两个选项。

选项#1:将其添加到主题

如果应用中的所有ButtonImageButton实例(或至少在活动中)都需要应用此样式,请将样式添加到主题中:

<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);

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

答案 1 :(得分:7)

borderlessButtonStyle 用于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 - Android Design for UI Developers

答案 2 :(得分:6)

使用selector作为背景,如下所示:

<强> /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是您的实际形象。

答案 3 :(得分:3)

你的回答是在Nick Butcher和Roman Nurik谈论Google I / O 2013关于UI开发者的android设计。

Min:31:40:

https://www.youtube.com/watch?v=Jl3-lzlzOJI#t=31m40s

这种方法的唯一问题是{1}可用于API 11及更高版本,因此如果您希望在11之前的任何API上使用相同的行为,那么您将不得不坚持使用选择器。

顺便说一句,我强烈建议你观看整个演讲,因为它非常有趣。

答案 4 :(得分:0)

你必须添加

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

它会起作用......

这就是xml文件中的方式:

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

希望这个帮助

答案 5 :(得分:0)

我希望这会对你有所帮助。请将背景透明为

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

            />

答案 6 :(得分:0)

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

然后,您可以将照片设置回长片后点击上一张图片,或点击。