Tim Kranen
Tim Kranen

Reputation: 4222

ImageView displaying in layout but not on actual device

I have an ImageView that I want to display matching the full width of the device, I realized that like this:

<ImageView
    android:id="@+id/home_bar_newvault"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:scaleType="centerCrop"
    android:layout_alignParentBottom="true"
    android:src="@drawable/home_bar" />

The home_bar is a PNG image file with the following dimensions: 2399x254. When I choose to view the Graphical Layout of the UI it displays the imageview correctly at the bottom of the activity. However, when I start the application on my device it won't display the Imageview at all.

Upvotes: 51

Views: 79007

Answers (12)

Eyni Kave
Eyni Kave

Reputation: 1530

Convert your image to VECTOR

How do I convert pngs directly to android vector drawables?

Sometimes based on your project config... standard images were not shown in imageview and no one of above answers was worked in these situations.

But if you convert your image to android-vector(xml) then it will be shown simply in all of configuration or property-set-types (tools, background, src...)

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/ic_launcher_background"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="75dp"
    android:id="@+id/logoImageView"
    android:scaleType="fitXY"
    android:scaleX="1.5"
    android:scaleY="1.5"
    tools:ignore="MissingConstraints" />

in this sample the @drawable/ic_launcher_background is a vector :

enter image description here

Upvotes: 0

Rahmad
Rahmad

Reputation: 43

I have the same problem, the image was fine in the layout editor but become blured when I start the app. My solution is very simple, when copy paste the image to the project choose drawable-xxhdpi for the destination directory to make the image size smaller.

Upvotes: 0

Chester Fung
Chester Fung

Reputation: 370

(The following answer is based on the latest development (2021) of the Android Studio)

You shall use androidx.appcompat.widget.AppCompatImageView and app:srcCompat to maximize the compatibility.

The implementation shall have be included when you create your new default project as this is somehow similar to the ConstraintLayout case.

<androidx.appcompat.widget.AppCompatImageView
    android:id="@+id/home_bar_newvault"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:scaleType="centerCrop"
    android:layout_alignParentBottom="true"
    app:srcCompat="@drawable/home_bar" />

Upvotes: 0

汝風留名
汝風留名

Reputation: 55

For my case, I change the scale type of the image

android:scaleType="fitXY"

Upvotes: 0

Maik Thielen
Maik Thielen

Reputation: 301

For me, the problem was that I was using

tools:src=...

rather than

android:src=...

It got auto-generated trying to use an already existing template image.

Upvotes: 30

I had the same issue and was able to solve it using following.

My problem was that the direction of the drawable archive was wrote in the second scrCompact box.

I copy-pasted in the up box and the issue solved.

enter image description here

Upvotes: 12

Idan Magled
Idan Magled

Reputation: 2216

None of the above did the trick, it was a really big image, found this solution: In your manifest file

<application
        //this solve it for me.
        android:hardwareAccelerated="false"
        // Add this if the previuos line didn't solve tge problem
        android:largeHeap="true"
        android:theme="@style/AppTheme">

Solve it for me.

Hope it helps someone.

Upvotes: 2

Francis
Francis

Reputation: 7104

Use drawable-nodpi folder in res if image is too big.

Upvotes: 6

ZooMagic
ZooMagic

Reputation: 666

I had a problem with a samsung phone not displaying my drawable but it worked fine on another phone. The picture was not in any large dimensions or otherwise abnormal.

To solve this I simply put my picture asset into a drawable subfolder instead of having it in the main drawable folder. E.g from res/drawable to res/drawable-mdpi worked for me. If you have a picture to use for everything not having a specific dpi, put it into res/drawable-nodpi. Here's a bit more about the dpi folders.

Upvotes: 1

Gouda Elalfy
Gouda Elalfy

Reputation: 7023

you can use:

android:background="@drawable/home_bar"

instead of:

android:src="@drawable/home_bar"

Upvotes: 17

Woppi
Woppi

Reputation: 5431

I had the same issue, it is only showing in Design tab for Android Studio 2.2.

What I did to make it work is to change the automatic key assigned (populated via Drag/Drop ImageView) from app:srcCompat="@drawable/logo" to android:src="@drawable/logo" in Text tab to make it appear on both the emulator and the device e.g

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/logo"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="75dp"
    android:id="@+id/logoImageView"
    android:scaleType="fitXY"
    android:scaleX="1.5"
    android:scaleY="1.5" />

Upvotes: 106

Tim Kranen
Tim Kranen

Reputation: 4222

Alright I've tried changing the resolution of the image (cutting it in half making it 1000x130), and somehow that fixed the problem. I think Android can't render large images like that directly? I don't know, if you know more about the subject please don't hesitate to reply! Anyway, scaling down the image worked.

Upvotes: 24

Related Questions