Design Support Libraryバージョン23.4.を使用しています。私はgradleフラグを有効にしました:
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
ビルドツールバージョン23.0.2を使用していますが、それでもキットカット以下でResources$NotFoundException
を取得しています。
Android:drawableLeft
またはimageView.setImageResource(R.drawable.drawable_image)
を使用すると発生します。
そして、はい、私はドロアブルを使用しているすべてのアクティビティにこれを入れています
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
これはサポートライブラリのバグですか?
サポートライブラリ23.4.0を使用してこれを機能させるには、3つのことを行いました。
これをbuild.gradleに追加します
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
次をアプリケーションクラスのonCreateに追加します
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
ベクトル描画可能置換を設定しているすべてのxmlビューについて
Android:src
と
app:srcCompat
そして、コードでこれを置き換えます:
imageView.setImageResource(...);
と
imageView.setImageDrawable(...);
ここでの回答の一部を補足するために、VectorDrawablesの下位互換性のあるサポートには料金がかかり、すべての場合に機能しません。
どの場合に機能しますか? この図 を作成しました(サポートライブラリ23.4.0から少なくとも25.1.0で有効)。
使用してみてください:
imageView.setImageDrawable(VectorDrawableCompat.create(getResources(), drawableRes, null));
このようにAppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
を追加する必要はありません。
VectorDrawableCompatを使用してベクタードロウアブルを膨らませるだけで、準備は完了です。
同じ問題がありました。ベクターのドロアブルはキットカットでは表示されませんでした。アクティビティのonCreateメソッドにAppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
を追加することで、この問題を解決しました。
その前に追加することを忘れないでください:
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
そして、ベクタードロウアブルを使用するビューのsetImageResourceを呼び出します。私の見解はImageButtonです。 Android SDKビルドツールバージョン23.0.3があります
パーティーに遅れてすみませんが、この回答は、すべてのアクティビティでフラグAppCompatDelegate.setCompatVectorFromResourcesEnabled(true);を有効にするユーザーに役立つ場合があります。
1。アプリケーション(Android.app.Application)に拡張するクラスを作成します
public class MyApplicationClass extends Application
{
@Override
public void onCreate()
{
super.onCreate();
}
}
2。Manifest.xmlに移動して、次の行をタグに追加します
<application
Android:name=".MyApplicationClass"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
...
</application>
。MyApplicationClass.JavaでonCreateの上に次のコードを追加
// This flag should be set to true to enable VectorDrawable support for API < 21
static
{
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
MyApplicationClass.Javaの完全なコード
import Android.app.Application;
import Android.support.v7.app.AppCompatDelegate;
/**
* Created by Gaurav Lonkar on 23-Dec-17.
*/
public class MyApplicationClass extends Application
{
// This flag should be set to true to enable VectorDrawable support for API < 21
static
{
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
@Override
public void onCreate()
{
super.onCreate();
}
}
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
app.gradleでこれを使用します
次に、AppCompatDrawableManager
を使用してsetDrawableとgetDrawableを設定します。私のために働く
サポートライブラリ23.3では、Android:drawableLeft
などの場所でのベクトルドロウアブルのサポートが無効になりました。 Google + :で発表されました
バージョン23.2.0/23.2.1の実装で見つかった問題のために、Lollipop以前のデバイス上のリソースからベクトルドロウアブルを使用できる機能を削除することにしました。 app:srcCompatとsetImageResource()の使用は引き続き機能します。
問題へのリンク:
ただし、これらの問題に対処できる場合は、23.4で AppCompatDelegate.setCompatVectorFromResourcesEnabled() を使用してこの機能を再度有効にできます。
これがどのように機能するのか興味がある場合は、この機能を作成したChris Banesから学ぶのが最適です。彼は詳細に説明します 彼のブログで 。
変化する
imageView.setImageResource(R.drawable.drawable_image)
に
imageView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.drawable_image));
xmlでvectordrawableを使用する場合は、これを使用します。
app:srcCompat="@drawable/drawable_image"
ベクターをdrawable-anydpi
に入れないでください。古いデバイスではサポートされていません
それらをdrawable
に入れます
私はずっと前に同様の問題を抱えていた、それは設定によって動作しませんでした
vectorDrawables.useSupportLibrary = true
「mipmap」フォルダを作成したときにのみ機能し、使用したコード
imageView.setImageResource (R.mipmap.drawable_image)
さらに情報があります こちら
私の特定のケースでは、次のように、セレクタ内のいくつかのベクトルで画像リソースとして描画可能なセレクタを使用していたため、この問題が発生しました:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true" Android:drawable="@drawable/vector_select_blue"/>
<item Android:state_pressed="true" Android:drawable="@drawable/vector_select_black"/>
.
.
etc
</selector>
はい、かなり悪いですが、当時はよくわかりませんでした。
したがって、これを行う正しい方法は、次のようにベクトルファイルでtintプロパティを使用することです。
<vector ..vector properties..
Android:tint="@color/vector_color_selector">
<path ..path properties../>
</vector>
(AppCompatImageViewでapp:tint属性を使用することもできます)
そして今、あなたのvector_color_selectorファイルは、次のようにあなたが望む色を持つべきです:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true" Android:color="@color/blue"/>
<item Android:state_pressed="true" Android:color="@color/black"/>
.
.
etc
</selector>
以前の回答がうまくいかなかった場合、これが誰かの助けになることを願っています。明白なことを述べますが、私はまだgradleでvectorDrawables.useSupportLibrary = trueを設定し、AppCompatImageViewを使用し、app:srcCompatまたはsetImageDrawable + AppCompatResources.getDrawableを使用してベクターcompatライブラリの問題を回避する必要があると言わなければなりません。
Harish Gyananiがコメントで言ったように、AppCompatImageView
の代わりにImageView
を使用してください。