43

ロリポップ以前のデバイスでベクター型ドローアブルを使用しようとしています。ここで指示されたとおりにすべて実行しましたが、それでもこのクラッシュが発生します。

build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-beta6'
    }
}
apply plugin: 'com.android.application'

repositories {
    maven { url 'http://maven.android-forever.com' }
    jcenter()
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.test.app"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile "de.greenrobot:eventbus:2.4.0"
    compile 'de.greenrobot:greendao:2.1.0'
    compile "com.af:android-utility:1.0.0.9"
    compile project(':volleyplus')
    compile project (':libvlc')
}

三角形.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/triangle_v"/>
</selector>

三角形_v.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100">

<path
    android:name="triangle"
    android:fillColor="#FF0000"
    android:pathData="m 50,0 l 50,100 -100,0 z"/>

</vector>

レイアウト.xml

<ImageView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@drawable/triangle"/>

私も試しapp:srcCompatてみましたが、その場合、drawable は表示されません。

4

14 に答える 14

33


vectorDrawables.useSupportLibrary = trueを使用する場合、このコードはベクターで動作します

に変更android:srcapp:srcCompatます。

例えば、

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/triangle"/>

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:srcCompat="@drawable/triangle"/>
于 2016-05-17T11:26:38.560 に答える
27

私は同様の問題に直面しました.@pedja自身の答えは役に立ちます。より一般的には、ベクター ドローアブルの互換性に関する Chris Banes の記事でImageView述べたように、サポート ライブラリは、いくつかのフックを介して pre-L のシステム 1 にそのバージョンを注入することによって機能します。これには、クラスの AppCompat バージョン ( など) をAppCompatActivity使用することが暗黙的に要求されます。

私の場合、ベクター型ドローアブルは、Application コンテキストを使用して、関連付けられたアクティビティのないスタンドアロンのトーストのようなビューで使用されます。私はAppCompatImageViewxmlレイアウト定義で直接使用することになりました。つまり、次のようなものです

<android.support.v7.widget.AppCompatImageView
             android:id="@+id/some_id"
             android:layout_width="24dp"
             android:layout_height="24dp"
             android:src="@drawable/selector_referencing_vector_drawable"/>

したがって、魔法の「フック」メカニズムは必要ありません。テストしたところ、これActivityは を使用しなくてもクラスで機能しAppCompatActivityます。上記のすべては、別の問題に対処する 23.2.1 にアップグレードせずに行われました。

于 2016-03-15T15:14:51.657 に答える
19

問題は、私の活動が延長ではAppCompatActivityなく定期的だったことActivityです。

これは、サポートベクタードローアブルのドキュメント/例では指定されていません

于 2016-03-06T10:26:11.357 に答える
1

drawableLeft/などでこの問題が発生しdrawableStartている場合、データバインディングを使用している場合、簡単な解決策があります。

それ以外の:

android:drawableLeft="@drawable/somevector" ❌

行う:

android:drawableLeft="@{@drawable/somevector}" ✅

これは、データバインディングが互換性のある方法でドローアブルを取得するコードをコンパイル時に生成するためです。

于 2018-10-22T08:56:21.577 に答える
0

<android.support.v7.widget.AppCompatImageViewベクター型ドローアブルをロードするときに使用している場合は、拡張する代わりAppCompatActivityActivity通常の使用に戻ることをお勧めします。<ImageView...app:srcCompat="@drawable/...

于 2016-07-08T16:00:59.017 に答える
0

この問題は code.google で見つけました。

あなたと同じ問題のようです。これは役に立ちますか? https://code.google.com/p/android/issues/detail?id=201843

于 2016-03-07T12:57:45.170 に答える