如何在 Android 中为点击的 ImageButton 添加边框?

7
我在我的Android项目中使用ImageButtons来展示一些图标。
<ImageButton
    android:id="@+id/button_one"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:padding="20dp"
    android:contentDescription="@string/button_one"
    android:background="@android:color/transparent"
    android:src="@drawable/button_one" />

当按钮处于按下状态时,我希望有一个圆角的白色边框。我该怎么做才能实现这个效果?是否需要使用额外的背景图像?请注意保留HTML标记。

1
通常我看到这是通过次要图像完成的,使用一个单独的drawable.xml文件来定义每个状态下的图像。然后,在特定的界面文件中调用该drawable作为此特定ImageButton的图像。 - trumpetlicks
真的没有更简单的方法吗?那么我就必须为所有不同的分辨率创建辅助图像...... - user2426316
你需要创建一个可绘制的 XML 文件并将其设置为背景! - Eenvincible
1个回答

22

如果您不想创建带边框的单独图像,这是一种方法。

使用您的边框样式创建可绘制的XML文件(例如border.xml)。

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="1dp"
        android:color="#FFF" />
    <padding
        android:left="1dp"
        android:top="1dp"
        android:right="1dp"
        android:bottom="1dp" />
    <corners
        android:bottomRightRadius="8dip"
        android:bottomLeftRadius="8dip"
        android:topRightRadius="8dip"
        android:topLeftRadius="8dip" />
</shape>

创建一个选择器drawable(例如:some_selector_name.xml)。基本上,当按下时,它将显示您的边框drawable。否则,它将是透明的。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/border" />
    <item android:drawable="@android:color/transparent" /> 
</selector>

将您的图像按钮背景设置为选择器图形。

<ImageButton
    android:id="@+id/button_one"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:padding="20dp"
    android:contentDescription="@string/button_one"
    android:background="@drawable/some_selector_name.xml"
    android:src="@drawable/button_one" />

现在当你按下按钮时,应该显示白色边框。 这只是一个例子,但你应该明白意思。


这正是我要找的!谢谢! - user2426316
很棒的解决方案 (Y) - Anmol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接