12

I have a fairly simple xml file that has an image button in it. The image shows up fine on the Graphical Layout xml designer, shows up fine when I run a development build, but as soon as I create the signed apk file and run it, the image no longer shows up. It's just an empty button. I can't think of a reason why, any ideas? The xml file looks like this:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/navigation_root"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/navigation_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="TextView"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <SeekBar
        android:id="@+id/navigation_seekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:padding="5dp" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp" >

        <ImageButton
            android:id="@+id/part_select_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/chapter_select" />

        <Button
            android:id="@+id/navigation_ok_button"
            android:layout_width="75dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="@string/ok" />

        <Button
            android:id="@+id/navigation_cancel_button"
            android:layout_width="75dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="@string/cancel" />
    </LinearLayout>
</LinearLayout>

The image @drawable/chapter_select is a fairly small (41*41) png file that is in the res/drawable folder.

hata
  • 11,633
  • 6
  • 46
  • 69
odiggity
  • 4,117
  • 7
  • 34
  • 41

8 Answers8

15

Seems like this is a bug with android, where sometimes the first image in the drawable folder doesn't show up. Added a dummy image called aaaa.png to the drawable folder and problem was solved. Found the answer here: ImageButton does not display a particular drawable

Community
  • 1
  • 1
odiggity
  • 4,117
  • 7
  • 34
  • 41
11

One of the reason is:

If you are using Vector file as a drawableLeft or drawableRight (or drawableStart or drawableEnd) in layout.xml, then you have to use androidx.appcompat.widget.AppCompatButton (formerly android.support.v7.widget.AppCompatButton) instead of Button.

Simple View like Button or Textview doesn't support Vector file as a drawableLeft or drawableRight (or drawableStart or drawableEnd) in my case.

hata
  • 11,633
  • 6
  • 46
  • 69
Tejas Pandya
  • 3,987
  • 1
  • 26
  • 51
  • 1
    Although OP's case was ImageView and this answer might not work with it, the answer is helpful for my case. Because I would set `drawableStart` to a Button in my layout.xml. – hata Dec 11 '21 at 12:08
8

Had the same issue and resolved it by removing all special characters. In my case it was dashes '-' in the filename:

background-720.png => background.png.

Ko Ga
  • 856
  • 15
  • 25
2

try to put the image in drawable-hdpi and drawable-mdpi folder depends on what device you run you app , the image is searched in these folders...

But puting in drawable means that the image should be available everywhere, but somethimes (depends on your manifest settings) this could not be true, I mean you can turn of the compatibility mode.

also you can try dinamically at run time to set the image to the view

iv.setImageResource(R.drawable.somethig);
Lukap
  • 31,523
  • 64
  • 157
  • 244
  • I don't want to put it in specific screen density folder because I want all devices to be able to use the image without making copies. Setting the image dynamically didn't change anything, it's still not showing up on the signed build. Thanks for trying though Luk. – odiggity Sep 19 '11 at 18:38
0

My situation was weird.Everything was correct until integrating FireBase Crash report to my Application.

I just added compile 'com.google.firebase:firebase-crash:11.0.1' & DrawableLeft vanished .When i went through the xml , noticed a warning (In lined below).

So added android:drawableStart & issue gone.

Still I am wondering about the relation of FireBase Crash reporting to the same.

Using left/right instead of start/end attributes Using Gravity#LEFT and Gravity#RIGHT can lead to problems when a layout is rendered in locales where text flows from right to left. Use Gravity#START and Gravity#END instead.

Similarly, in XML gravity and layout_gravity attributes, use start rather than left. For XML attributes such as paddingLeft and layout_marginLeft, use paddingStart and layout_marginStart.

NOTE: If your minSdkVersion is less than 17, you should add both the older left/right attributes as well as the new start/right attributes. On older platforms, where RTL is not supported and the start/right attributes are unknown and therefore ignored, you need the older left/right attributes.

There is a separate lint check which catches that type of error. (Note: For Gravity#LEFT and Gravity#START, you can use these constants even when targeting older platforms, because the start bitmask is a superset of the left bitmask. Therefore, you can use gravity="start" rather than gravity="left|start".)

Don Chakkappan
  • 7,397
  • 5
  • 44
  • 59
0

Check your image size. If you're using an unnecessarily large asset when actually deployed it might just not show despite looking correct in the designer.

Edd
  • 11
  • 2
0

Well ! in my case setting MinifyEnabled false and shrinkResources false is working fine now.

i was getting image from drawable. it was working pretty nice in debug version but after release version of apk it was showing sometime blank ImageView.

minifyEnabled false shrinkResources true

**

See the Screenshots

**

**Before****After**

Hope this may help anyone.

Darshan Khatri
  • 317
  • 3
  • 15
0

I had a similar problem where a drawable png was not showing up in Android Studio. Deleted the file and added it again in the drawable folder and it Worked for me.