【问题标题】:How to make a button with an icon in Android?如何在Android中制作带有图标的按钮?
【发布时间】:2021-10-08 22:19:05
【问题描述】:

没想到会这么难。我想制作一个按钮,就像普通按钮一样,但我希望它显示一个图标(SVG)而不是文本。

我试过了:

  • 设置icon在按钮的左边缘绘制一个小图标
  • 使用ImageButton 代替Button 得到scaleType=fitCenter,但看起来不再像按钮(它只是一个灰色矩形)
  • 设置background 会扭曲图标,因为它不会保持纵横比并且它看起来不再像按钮了
  • 将表情符号用作text 可以,但我只能使用可用的表情符号范围

【问题讨论】:

  • 您可以尝试使用the Material Design button documentation 中的“实现仅图标切换按钮”说明进行一些实验。虽然这些信息集中在切换按钮上——这可能不是你想要的——但你可能会从它们如何设置各个按钮的样式中获得一些想法。
  • 不幸的是,我根本不懂样式方面的东西。这可能与ImageButtonImageView 的子类而不是Button 的事实有关。 Button 的文档实际上谈到了“buttonStyle”和“系统的默认按钮背景”,但我不知道它们是如何结合在一起的。
  • 然后ImageButton 的文档又说“默认情况下,ImageButton 看起来像普通的Button”,这显然是错误的,因为任何人都可以通过将按钮和 ImageButton 拖入来验证布局。
  • 关于那种奇怪的外观,尽管文档说我已经打开了another question

标签: android


【解决方案1】:

你可以选择这个选项:

  • 设置图标在按钮的左边缘绘制一个小图标

然后:

  • 控制大小:使用app:iconSize属性。

  • 控制向右的水平位移

    1. 将负边距调整为app:iconPadding

    2. 将正边距调整为android:paddingStart

调整到高值时要小心,可以使图标与按钮文本相交。

这是一个示例:

<Button
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:paddingStart="50dp"
    android:paddingLeft="50dp"
    android:text="Alert\nReceived"
    android:textSize="18sp"
    app:icon="@drawable/alarm"
    app:iconPadding="-20dp"
    app:iconSize="70dp" />

更新

所以不清楚如何使图标居中。顺便说一句,没有文字,我想要一个只有图标的按钮。 ——

因为它是一个只有一个图标的无文本按钮:

可以使用app:iconGravity="textEnd" 使图标居中,它将图标与文本末尾对齐(默认情况下,女巫在中心)。 这也可以与textStart 一起使用,因为还没有文本。

您也可以删除默认图标填充,因此还要设置app:iconPadding="0dp",并删除android:paddingStart 属性

【讨论】:

  • 两个问题: 1. 现在我调整了iconSize 可以看到图像失真了。我想在你的例子中它只起作用,因为时钟是方形的。 2.app:iconPadding好像没有效果,android:paddingStart不接受百分比,所以不清楚如何让图标居中。顺便说一句,没有文字,我想要一个只有图标的按钮。
  • @AndreKR 为了使图标居中,我刚刚更新了答案。关于失真,它与图标高度耦合;您可以尝试不同类型的图标并查看
  • 你可以试试MaterialButton;不确定它是否对失真有好处
  • 当我查看调试器中的按钮时,它说它实际上 MaterialButton。不知道发生了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2021-04-02
  • 2016-05-19
  • 1970-01-01
  • 2017-09-11
  • 2013-01-12
相关资源
最近更新 更多