Search code examples
androidscalecompound-drawables

How can I shrink the drawable on a button?


how can I make the drawable on a button smaller? The icon is too big, actually higher than the button. This is the code I am using:

    <Button
    android:background="@drawable/red_button"
    android:drawableLeft="@drawable/s_vit"
    android:id="@+id/ButtonTest"
    android:gravity="left|center_vertical" 
    android:text="S-SERIES CALCULATOR"
    android:textColor="@android:color/white"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginLeft="25dp"
    android:layout_marginRight="25dp"
    android:drawablePadding="10dp">
    </Button>

The upper is how it should look, the lower how it looks right now.

The upper is how it should look, the lower how it looks right now.

I tried this but there is no image displayed. :-(

    Resources res = getResources();
    ScaleDrawable sd = new ScaleDrawable(res.getDrawable(R.drawable.s_vit), 0, 10f, 10f);
    Button btn = (Button) findViewById(R.id.ButtonTest);
    btn.setCompoundDrawables(sd.getDrawable(), null, null, null);

Solution

  • You should use a ImageButton and specify the image in android:src, and set android:scaletype to fitXY


    Setting scaled drawable in code

    Drawable drawable = getResources().getDrawable(R.drawable.s_vit);
    drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*0.5), 
                             (int)(drawable.getIntrinsicHeight()*0.5));
    ScaleDrawable sd = new ScaleDrawable(drawable, 0, scaleWidth, scaleHeight);
    Button btn = findViewbyId(R.id.yourbtnID);
    btn.setCompoundDrawables(sd.getDrawable(), null, null, null); //set drawableLeft for example