Android vector drawable app:srcCompat not showing images

Solution 1:

Original Answer

Use android.support.v7.widget.AppCompatImageView instead of ImageView in your layout, like this:

<LinearLayout 
  ...
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">

  <android.support.v7.widget.AppCompatImageView
    android:tint="#d74313"
    app:srcCompat="@drawable/circle_icon"
    android:layout_width="30sp"
    android:layout_height="30sp" />

  <android.support.v7.widget.AppCompatImageView
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    app:srcCompat="@drawable/lauzaviete"
    android:layout_width="25dp"
    android:layout_height="25dp" />
</LinearLayout>

See the AppCompatImageView docs here and app:srcCompat here.

Also, make sure to do the following:

Setup your build.gradle

android {
  defaultConfig {
    vectorDrawables {
      useSupportLibrary = true
    }
  }
}

Docs: https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html#com.android.build.gradle.internal.dsl.VectorDrawablesOptions:useSupportLibrary

Extend your Activity with AppCompatActivity

public final class MainActivity extends AppCompatActivity {    
  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
  }
}

When using app:srcCompat, make sure to have the correct declarations in your layout:

<LinearLayout 
  ...
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  ...
</LinearLayout>

Optional (warning: please read docs): setCompatVectorFromResourcesEnabled in your Application class

public class App extends Application {

  @Override public void onCreate() {
    super.onCreate();

    // Make sure we use vector drawables
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
  }
}

Docs: https://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html#setCompatVectorFromResourcesEnabled(boolean)

Solution 2:

I had a similar issue and after following all steps from Jared Burrows's answer the problem was not solved.

Turns out that the "app" namespace inside my layout file was set as:

xmlns:app="http://schemas.android.com/tools"

instead of:

xmlns:app="http://schemas.android.com/apk/res-auto"

After changing this the problem was fixed

Solution 3:

Incase anyone else runs into this problem and is using androidx, then try using androidx.appcompat.widget.AppCompatImageView

Solution 4:

In summary:

  1. Put vector drawable support in your module (build.gradle)

    defaultConfig {           
         vectorDrawables.useSupportLibrary = true
     }
    
  2. Instead of android:src="@drawable/icon" use app:srcCompat="@drawable/icon"

  3. Make sure your Activity extends AppCompatActivity without this step is not possible to show vector image with app:srcCompat

Solution 5:

use:

android:background="@drawable/circle_icon"

instead of:

app:srcCompat="@drawable/circle_icon"