ImageButton上的填充无效

60

我正在开发的应用中有几个ImageButton。每个ImageButton都有一个背景和以drawable形式呈现的内容。现在,这个drawable在ImageButton的限制范围内已经达到了最大尺寸,但是我希望它能缩小,所以我需要添加一些填充。问题是,当我尝试这样做时,它没有任何效果。每个ImageButton的XML如下:

<ImageButton
    android:id="@+id/button_zero"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:padding="10dip"
    android:src="@drawable/button_zero"
    android:background="@drawable/button_background" />

有什么想法,为什么填充(padding)不起作用?

完整的 XML 代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#222222"
    tools:context=".Main" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <!-- Row One -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
            <ImageButton
                android:id="@+id/button_zero"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="10dip"
                android:src="@drawable/button_zero"
                android:background="@drawable/button_front" />
            <ImageButton
                android:id="@+id/button_one"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="10dip"
                android:src="@drawable/button_one"
                android:background="@drawable/button_front" />
            <ImageButton
                android:id="@+id/button_two"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="10dip"
                android:src="@drawable/button_two"
                android:background="@drawable/button_front" />
            <ImageButton
                android:id="@+id/button_three"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="10dip"
                android:src="@drawable/button_three"
                android:background="@drawable/button_front" />
            <ImageButton
                android:id="@+id/button_four"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="10dip"
                android:src="@drawable/button_four"
                android:background="@drawable/button_front" />
        </LinearLayout>

        ... same for other rows

    </LinearLayout>


请问您能否添加您的所有XML代码? - user2235615
@user2235615 我更新了问题 :) - Zero
4个回答

145

您需要在您的ImageButton定义中添加

android:scaleType="fitCenter"

或者使用像fitXY这样的其他scaleType,因为默认情况下,图像会尝试尽可能缩放并忽略填充。


1
更好的方式是ScaleX=1.4和ScaleY=1.4。 - Hrvoje Matić

5

内边距只对android:src属性有效,而不对android:background有效。

将前者设置为您的按钮图像,将后者设置为android:background="@android:color/transparent"


3
我建议人们使用?attr/selectableItemBackground而不是透明,这样基于主题配置的触摸反馈将得以保留。 - TrevJonez

3
如果您需要使用 padding 来调整图像大小,请使用 ImageView 而不是 ImageButton

0

这个问题涉及到 scaleType 的默认设置,在 ImageButton 中是 fitXY,你只需要将其改为 fitCenter

<ImageButton
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:paddingVertical="4dp"
            android:scaleType="fitCenter" />

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