Android 矢量可绘制对象 app:srcCompat 未显示图像

Android vector drawable app:srcCompat not showing images

我正在使用支持库在 android kitkat 上显示矢量图像。当我在模拟器上测试我的应用程序时,我没有看到任何这些图像。我为 android 棒棒糖及更高版本制作了一个单独的布局,它工作得很好(我想是因为我使用的是 src 属性而不是 srcCompat 这是我使用支持库的代码

<LinearLayout android:layout_alignParentBottom="true"
android:id="@+id/lake_detail"
android:background="@drawable/my_fishing_plan_footer_line"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="90dp"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<RelativeLayout
            android:layout_marginRight="3dp"
            android:id="@+id/fire_logo"
            android:layout_width="20sp"
            android:layout_height="20sp">

            <ImageView
                android:tint="#d74313"
                app:srcCompat="@drawable/circle_icon"
                android:layout_width="30sp"
                android:layout_height="30sp" />

            <ImageView
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                app:srcCompat="@drawable/lauzaviete"
                android:layout_width="25dp"
                android:layout_height="25dp" />

        </RelativeLayout>

这很奇怪,因为我在 android 工作室预览 window.

上看到了图像

原答案

在布局中使用 android.support.v7.widget.AppCompatImageView 而不是 ImageView,如下所示:

<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>

请参阅 AppCompatImageView 文档 here and app:srcCompat here

此外,请确保执行以下操作:

设置您的 build.gradle

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

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

AppCompatActivity

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

    setContentView(R.layout.activity_main);
  }
}

使用 app:srcCompat 时,请确保布局中的声明正确:

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

可选(警告:请阅读文档):setCompatVectorFromResourcesEnabled 在您的 Application class

public class App extends Application {

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

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

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

我遇到了类似的问题,在按照 中的所有步骤进行操作后,问题仍未解决。

原来我的布局文件中的 "app" 命名空间被设置为:

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

而不是:

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

更改后问题得到解决

使用:

android:background="@drawable/circle_icon"

而不是:

app:srcCompat="@drawable/circle_icon"

另外请确保您的矢量图位于 drawable 而不是 drawable-anydpi

如果图形位于 drawable-anydpi 文件夹中,我经常会遇到问题。

实施并 app:srcCompact 然后您可以在 ImageView

上使用它

implementation 'com.android.support:appcompat-v7:28.0.0'

确保实施正确的版本。

然后在你的 build.gradle 中设置 android.defaultConfig.vectorDrawables.useSupportLibrary = true

defaultConfig {

    //...

    vectorDrawables {
        useSupportLibrary true
    }
}

总结:

  1. 在您的模块中添加矢量绘图支持 (build.gradle)

    defaultConfig {           
         vectorDrawables.useSupportLibrary = true
     }
    
  2. 而不是 android:src="@drawable/icon" 使用 app:srcCompat="@drawable/icon"

  3. 确保 如果不执行此步骤,您的 Activity extends AppCompatActivity 将无法使用 app:srcCompat

    [ 显示矢量图=28=]

如果其他人遇到这个问题并且正在使用 androidx,请尝试使用 androidx.appcompat.widget.AppCompatImageView

我的代码也有问题。 解决方案:由于 Android 正在升级到 Androidx 工件, 我使用了 Instead of Regular 并且成功了!