Padding not working on ImageButton

AndroidPaddingImagebutton

Android Problem Overview


In an app I am working on, I have several ImageButtons. Each ImageButton has a background and content in the form of a drawable. Right now the drawable is at maximum size within the confines of the ImageButton, but I want it to scale down so I need to add some padding. The thing is that when I try to do that, it doesn't have any effect. My XML is as follows for each ImageButton:

<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" />

Any ideas why the padding doesn't do anything?

Full XML code:

<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>

Android Solutions


Solution 1 - Android

You have to add to Your ImageButton definition

android:scaleType="fitCenter"

or other scaleType like fitXY, because by default image try to scale as much as possible and ignore padding

Solution 2 - Android

The padding only has effect on the android:src attribute, not on the android:background.

Set the first to your button image and the latter to android:background="@android:color/transparent"

Solution 3 - Android

Better use ImageView than ImageButton if you need set image smaller with padding

Solution 4 - Android

this issue about scaleType default, in the ImageButton that is fitXY, you just need to change fitCenter.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZeroView Question on Stackoverflow
Solution 1 - AndroidGooziecView Answer on Stackoverflow
Solution 2 - AndroidPJ_FinneganView Answer on Stackoverflow
Solution 3 - Androidnicolas asinovichView Answer on Stackoverflow
Solution 4 - AndroidRasoul MiriView Answer on Stackoverflow