Android 应用程序 - 没有文本的基本图标按钮

Android app - basic icon button without text

如何制作没有文字或背景的基本图标按钮?例如,@drawables 中的一个简单矢量图像,单击时会显示其周围的圆形响应。我不希望图标有任何背景颜色。只是一个可以点击的图标,就是这样。

我只能通过创建 menu 并将图标设置为 itemapp:showAsAction="always" 来弄清楚如何做到这一点。看来必须有更好的方法来做到这一点。

编辑:这是我想要实现的示例。这是非常基本的。只是一个可点击的图标,触摸时具有响应反馈。 https://material-ui.com/components/buttons/#icon-buttons

和下面的创建完全一样。我只是认为可能有一种更简单的方法可以做到这一点,而不必仅为一个图标创建和加载菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.mycompany.myapp.MainActivity">

    <item
        android:id="@+id/action_contacts"
        android:icon="@drawable/ic_contacts_24"
        android:title="@string/action_contacts"
        app:iconTint="@android:color/white"
        app:showAsAction="always" />

</menu>

您可以为此使用 MaterialButtonImageButton 甚至 ImageView。这是一个示例,说明如何使用 ImageView...

        <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:focusable="true"
                android:background="?attr/selectableItemBackground"
                android:src="@drawable/your_icon" />

您需要做的就是设置 selectableItemBackground,这将使用您主题的主要颜色(或者可能是次要颜色,我不记得了)。

现在如果您想要不同颜色的波纹效果,例如灰色波纹,那么您可以自己创建可绘制对象...

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="#dddddd">
    <item android:id="@android:id/mask">
        <color android:color="#dddddd" />
    </item>
</ripple>

并在下方设置视图背景..

android:background="?attr/selectableItemBackground"

如果视图是可点击的,它将适用于任何视图

First create a vector drawable and then add to the ImageView like this:

<ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?selectableItemBackgroundBorderless"
        android:clickable="true"
        android:focusable="true"
        app:srcCompat="@drawable/ic_delete" />

是的,如果您愿意,可以使用 ImageView,但如果您想自己生成完整的图像(包括 frame/borders),则不必走那么远。您实际上可以使用普通的 View(除非您必须明确提供 android:layout_width/height)。只需使用 Button 并让 android:background 在图像之间指定 select 或 select。

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