4

私はサポートlibにバージョン24.2.1を使用しています、とAppCompatDelegate.setCompatVectorFromResourcesEnabled(true);AppCompatDrawableManager.get()VectorDrawableCompat.create対()

をサポートベクトルを有効にしているサポートベクトルに関するこれらの機能の違いは何ですか?私はVectorDrawableCompat.create(getResources(), R.drawable.my_vector, null)を使用していました。プログラムでそのようなボタンの上に描画可能に設定するときしかし、これは私のテストデバイス(アンドロイド4.3)に描画可能を生成しません。(状態リストセレクタに包まれた)AppCompatDrawableManager.get().getDrawable(getActivity(), R.drawable.my_vector);を使用して

button.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);

は大丈夫動作しているようです、私はそれのためのドキュメントを見つけるように見えることはできません。

+2

'AppCompatDrawableManager'が隠されている、使用' AppCompatResources#getDrawable'代わり – pskink

+2

@pskink 'AppCompatResources.getDrawable(...)' 24.xxにinstroduced 'AppCompatDrawableManager.get(へのパブリックAPIのショートカットです)。getDrawable(。 ..) '早く利用可能です。 –

答えて

9

サポートベクターに関するこれらの機能の違いは何ですか?

AppCompatDrawable.getDrawable(...)は、API 21以下

  • ベクトルドロワブル含むドロワブルのすべての種類を膨らませます(サポートベクタードローアブルをビルドスクリプトで有効になっている場合にのみ、さらに読み)
  • 適切テーマにAPPCOMPATドロワブル
  • を得られる他の任意の引き出し可能物

この方法内部的にはAppCompatDrawableManager.get().getDrawable(Context, int)と呼ばれ、パブリックAPIの一部ではありません。どちらの方法も、消費者の観点から機能は同等である。

VectorDrawableCompat.create(...)は、ベクター描画可能ファイルのみを膨張させます(サポートベクター描画ファイルがビルドスクリプトによって有効になっている場合のみ、さらに詳しく読む)。

しかし、これは

VectorDrawableCompat.create(...)(アンドロイド4.3)私のテストデバイス上で描画可能を生成しませんエラーにnullを返します。これは、参照されるドロウアブルがベクタードローラブルでなく、ビルドプラグインを正しく構成せず、API 21以下のプラットフォームでPNGを生成した場合に発生する可能性があります。

API drawlable アプリモジュールbuild.gradle

// Gradle Plugin 2.0+ 
android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

更なる情報のためAndroid Support Library 23.2ブログ記事を参照してください。

私はサポートlibにバージョン24.2.1を使用していて、「サポートベクトルを有効にする」しないAppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

この方法でサポートベクトルを有効にしています。まず、上記のようにbuild.gradleにサポートベクトル描画可能を有効にする必要があります。

この方法では、基本的にドロウアブルコンテナ内でサポートベクターのドロウブルをLayerDrawableまたはStateListDrawableのように有効にします。

詳細については、AppCompat — Age of the vectorsを参照してください。

+1

もうちょっと大丈夫です。私はgradleフラグを設定しましたが、実際には、私のエラーは、 'setCompoundDrawablesWithIntrinsicBounds()'で使用する状態リストドロアブルにベクトルをラップしていると思います。これは、まっすぐなベクトルと 'VectorCompat.create'を使って4.3で私のために働いているようです。 –

+1

はい、XML属性の複合ドロアブルのラッパーと' VectorDrawableCompat.create'のラップされていないベクトルを使用してください。 –

+0

うわー、お返事に感謝して、感謝しました。私はそれを実行していたが、ラッパーなしで、私が再インストールされ、動作しなかった。アプリは少なくとも一度はそれらを作成すれば何とかベクトルにハングアップしているようですので、実験してみるとデータを再インストール/クリアするのが一番良いようです –

関連する問題