【问题标题】:Remove padding of ImageButton删除 ImageButton 的填充
【发布时间】:2017-06-16 04:16:51
【问题描述】:

如何获得具有固定高度且仅根据其源图像的比例所需的宽度的ImageButton

我尝试了以下方法:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="8pt"
    android:minWidth="0pt"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:src="@drawable/list_download"
    android:background="@android:color/black"
    android:padding="0pt"/>

我将背景设置为黑色只是为了准确查看它的边界,here 就是结果。

我看到了一些建议使用负填充的解决方案,但这不是一个优雅的解决方案。应该有更好的。

我也在ImageView 上尝试了类似的配置,但它也有额外的填充。所以这不是ImageButton 特定的问题(即它与this 九补丁问题无关)。

编辑:如果我将scaleTypefitCenter 更改为fitStart,那么结果就像this。所以不知何故有一个最小宽度。

【问题讨论】:

  • 你是指左右padding吗?
  • @Rod_Algonquin 是的。对于fitCenter,左右。对于fitStart,只对了。
  • 这可以通过使用矢量 xml 图像来解决,您可以在 xml 中指定图像的宽度/高度(非常简单),您也不需要缩放它,因为矢量已经可以缩放.
  • @Rod_Algonquin 我想要实现的是,我不想同时设置宽度和高度。我只想设置一个维度,并根据图像的比例适当地设置另一个维度。

标签: android android-layout padding imagebutton


【解决方案1】:

您只需要使用 android:scaleType="fitXY" 并设置填充 0dp。

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"
    android:padding="0dp"/>

【讨论】:

    【解决方案2】:

    这是因为您设置了一个有限的高度。这限制了图像的高度,但是当 Android 计算内容的宽度(原始未缩小的图像)时,它会更宽。

    如果您也使用 wrap_content 作为高度,您将获得侧面没有黑色“填充”的图像。

    <ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="0pt"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:src="@drawable/list_download"
    android:background="@android:color/black"
    android:padding="0pt"/>
    

    因此,如果您希望图片具有特定大小,您可以在可绘制文件夹中将其调整为您想要的大小。

    【讨论】:

    • 正如我在问题的 cmets 中所写,我只想设置一个维度(宽度或高度)并让 android 适当地计算另一个维度。正如你所说,按钮比图像宽。为什么?它的宽度是wrap_content,为什么它比图像宽?这是我的问题。
    • 我在发帖之前没有看到评论,抱歉。图像按钮变得比屏幕上显示的图像更宽,但它具有原始可绘制/图像精确宽度。有你的问题。当您仅指定静态高度或宽度时,我不知道如何以您想要的方式缩放图像。但我确信这是可能的。你总是可以在你的代码中做到这一点(而不是布局)。
    • "...但它具有原始可绘制/图像的确切宽度。"不幸的是,这是错误的,尽管这是我的预期。它比wrap_content 所暗示的要宽。 (顺便说一句,图像本身不包含额外的填充,如 fitStart 案例所示。)
    • 至少在我尝试时是这样。设置静态高度后,它保持相同的宽度。 wrap_contentstatic height。但是,可能是其他原因造成的?
    【解决方案3】:

    你可以像这样把它放在一个框架中:

    <FrameLayout 
       android:layout_width="wrap_content"
       android:background="@android:color/black"
       android:layout_height="wrap_content">
    
       <ImageView 
          android:src="@drawable/list_download"
          android:scaleType="fitCenter"
          android:layout_height="wrap_content"
          android:layout_gravity="center"
          android:layout_width="8dp"/>  
    </FrameLayout>
    

    这样玩起来会容易得多

    【讨论】:

    • 这并不能解决额外的填充问题。即使我在FrameLayoutImageView 上都将填充设置为零,我仍然有填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多