Android bitmap image size in XML
AndroidXmlBitmapAndroid Problem Overview
In my XML file, I'm using bitmap as the following
<bitmap
android:src="@drawable/Icon"
android:gravity="center"/>
Here the image width of the icon exceeds the screen.
I tried android:width="100dp" and all. But it isn't working.
Complete XML file:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<stroke android:width="3dp" android:color="@color/black" />
<solid android:color="@color/bg_green" />
</shape>
</item>
<item>
<bitmap
android:src="@drawable/Icon"
android:gravity="center"/>
</item>
</layer-list>
How can I reduce the width and height of the above bitmap?
Android Solutions
Solution 1 - Android
Only API 23 or later
Just use
<item
android:width="200dp"
android:height="200dp"
android:drawable="@drawable/splash_background"
android:gravity="center" />
instead
<item
android:left="200dp"
android:right="200dp">
<bitmap
android:src="@drawable/splash_background"
android:gravity="center" />
</item>
Solution 2 - Android
Although there is no width and height parameters for bitmap, you can set bitmap size using gravity and item width/height.
<item
android:width="230dp"
android:height="70dp">
<bitmap
android:gravity="fill_horizontal|fill_vertical"
android:src="@drawable/screen" />
</item>
You can set item width and height and scale bitmap inside of it using gravity.
I know this is old question but maybe someone will find it useful.
WARNING:
As already mentioned in comments, this method ONLY works with API level 23 (Android 6.0) and up.
Solution 3 - Android
If you want to reduce the width and height so it fits on the screen, and you don't need to set exact dimensions, you can simply set left
and right
on the parent item. That will essentially add a margin around the image so it takes up less space:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="20dp"
android:right="20dp">
<bitmap
android:src="@drawable/Icon"
android:gravity="center" />
</item>
</layer-list>
Ideally, though, you should upload different size images for each screen resolution (e.g. hdpi
, xxhdpi
) and then you won't need to programmatically set the size at all. You can see the full list here.
Solution 4 - Android
this one I use for resize my mipmap on to my launch screen.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
<item android:drawable="@color/colorPrimary"/>
<item
android:width="200dp"
android:height="200dp"
android:gravity="center">
<bitmap
android:gravity="fill"
android:src="@mipmap/ic_launcher"
android:mipMap="true"/>
</item>
</layer-list>
Solution 5 - Android
Try to do it this way, this worked for me:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="30dp"
android:height="30dp"
android:gravity="center"
>
<bitmap
android:src="@drawable/screen"/>
</item>
</layer-list>
Solution 6 - Android
From Android Developers I saw that there is no tag for Bitmap XML that allow you to change it size. You need to do this via some Graphic Applications like GIMP. As @Kevin Cooper told already, ideally you need to create different sets of resources (with different sizes) for different screen types.
But still you can resize it using width and height attributes in ImageView
, instead of creating bitmap with different size:
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="center"
android:src="@drawable/Icon" />
If you want to reuse this image in other places, you can create separate style and reuse it:
// in styles.xml
<style name="Icon24x24">
<item name="android:src">@drawable/Icon</item>
<item name="android:gravity">center</item>
<item name="android:layout_width">24dp</item>
<item name="android:layout_height">24dp</item>
</style>
// in layout.xml
<ImageView style="@style/Icon24x24"/>
Another way of reusing, may be creating of separate layout file for one ImageView
and then including in to other layouts.
If you want to use this bitmap
inside of layer list, please see @Kevin Cooper answer, as he suggested it is possible to add paddings to layer list item
:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="20dp"
android:right="20dp">
<bitmap
android:src="@drawable/Icon"
android:gravity="center" />
</item>
</layer-list>
And as @Nicolo also pointed, form API 23, it is possible to set android:width
and android:height"
to item.
Solution 7 - Android
Complete Solution just copy paste and change the Image Path
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:gravity="center"
android:width="286dp"
android:height="176dp">
<bitmap
android:src="@drawable/logo"
android:gravity="fill_horizontal|fill_vertical" />
</item>
</layer-list>
Solution 8 - Android
so i fixed that by typing:
<item
android:height= "250dp"
android:width= "250dp"
android:gravity="center">
<bitmap
android:gravity="fill_horizontal|fill_vertical"
android:src="@mipmap/ic_launcher"/>
</item>
Solution 9 - Android
I just resized the image manually then it works for me
Solution 10 - Android
1.Step 1: Add android:background=
to the Spinner/AppCompatSpinner
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="@dimen/input_height"
android:background="@drawable/shape_drop_down_normal"
/>
2. Create a shape_drop_down_normal.xml
in /drawable
2A) If you have a ic_spinner_dropdown.png drawable resource for the Spinner bitmap
shape_drop_down_normal.xml
2B) If you have a ic_spinner_dropdown_vector.xml vector drawable resource for the Spinner bitmap
shape_drop_down_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:width="20dp"
android:height="13dp"
android:gravity="end|center_vertical"
android:drawable="@drawable/ic_spinner_dropdown_vector">
</item>
</layer-list>
4. Warning!
android:width="20dp"
android:height="13dp"
in layer-list require API 23+, use
android:left="20dp"
android:right="13dp"
for lower API levels, or simply omit the width and height constraints, and set the dp directly in vector drawable (it works perfectly for all API levels).