Android矢量drawable app:srcCompat没有显示图像

Dav*_*vid 73 android android-support-library

我正在使用支持库在android kitkat上显示矢量图像.当我在emulater上测试我的应用程序时,我没有看到任何这些图像.我为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>
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我在android studio预览窗口看到了图像.

Jar*_*ows 184

原始答案

使用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>
Run Code Online (Sandbox Code Playgroud)

请参阅此处此处AppCompatImageView文档.app:srcCompat

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

设置你的 build.gradle

android {
  defaultConfig {
    vectorDrawables {
      useSupportLibrary = true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

扩展您ActivityAppCompatActivity

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

    setContentView(R.layout.activity_main);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

<LinearLayout 
  ...
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  ...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

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

public class App extends Application {

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

    // Make sure we use vector drawables
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么我要在布局中使用`AppCompatImageView`.该文档说:"当你在布局中使用ImageView时,这将自动使用.你应该只需要在编写自定义视图时手动使用这个类." (7认同)
  • @JaredBurrows #JustForRecords如果在android.support.v7.widget.AppCompatImageView上使用app:srcCompat属性,则无需从AppCompatActivity扩展活动 (4认同)
  • 为什么它不能与 supportLibVersion = '25.0.1' 中的 ImageView 一起使用? (2认同)

D-C*_*d3r 14

我有一个类似的问题,在遵循Jared Burrows的回答所有步骤后,问题没有解决.

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

xmlns:app="http://schemas.android.com/tools"
Run Code Online (Sandbox Code Playgroud)

代替:

xmlns:app="http://schemas.android.com/apk/res-auto"
Run Code Online (Sandbox Code Playgroud)

更改后,问题得到解决


nad*_*ada 12

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

  • 为什么我应该在布局中使用AppCompatImageView。该文档说:“当您在布局中使用 ImageView 时,将自动使用该类。您只需要在编写自定义视图时手动使用此类。” (3认同)

Gab*_*rez 5

总之:

  1. 将矢量绘图支持放入模块中(build.gradle)

    defaultConfig {           
         vectorDrawables.useSupportLibrary = true
     }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 而不是android:src="@drawable/icon"使用app:srcCompat="@drawable/icon"

  3. 确保如果Activity extends AppCompatActivity没有此步骤,则无法显示矢量图像app:srcCompat