5

XML で定義されている VectorDrawable のいくつかのプロパティを理解するのに助けが必要です。

Android Studio を使用して新しいベクター アセットをインポートすると、次のようなものが生成されます。

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

    <path 
        android:fillColor="#000000"
        android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z" />
</vector>

デフォルトでは、幅、高さ、viewportHeight、および viewportWidth は、デフォルトのマテリアル デザイン値に設定されています。

ピクセル画像ではなくベクトルを扱っているためです。私の質問は次のとおりです。

  • サイズ (幅、高さなど) を設定する必要があるのはなぜですか?
  • 複数のサイズに同じベクター xml を使用する必要がある場合、複数のベクター xml を作成せずにこの 24 dp 値をオーバーライドする方法は、もちろん目的全体を無効にします!
4

4 に答える 4

5

xml ベクトルに @dimen を追加すると、エラー Error:Error: Width (0) and height (0) cannot be <= 0 が発生する

于 2016-04-14T16:35:34.917 に答える
4

VectorDrawables は、以前は png を使用していた場所で使用できます。VectorDrawable に幅と高さがない場合、まったく新しい問題が発生します。VectorDrawable のサイズを元の xml の一部として定義していない場合は、毎回定義されていることを確認する必要があります。使いたかった。

これにより、VectorDrawable の使用は他のドローアブルの使用とは大きく異なります。たとえば、「wrap_content」の使用は機能しません。これは、「コンテンツ」に依存してサイズを定義しているためです。つまり、現在のように png を VectorDrawable に置き換えるだけでは、アプリの一部が破損する可能性があります。

デバイス構成ごとに VectorDrawable を異なるサイズにしたい場合は、リソースへの参照を使用して定義できます。

<vector ...
        android:width="@dimen/vector_size"
        android:height="@dimen/vector_size"
        .../>

次に、これを res/values で定義します。

<resources>
    <dimen name="vector_size">24dp</dimen>
</resources>

その後、通常の方法で異なるデバイス構成に対して別の値として vector_size を指定できます。

同じデバイスで複数のサイズの同じ VectorDrawable を使用する場合、現時点では少し難しく、複数のバージョンを作成するのが最善の方法かもしれません。これを行う場合は、pathData を文字列リソースに移動することを検討してください。

<path ...
    android:pathData="@string/vector_path_name"/>

このように、複数の VectorDrawables があっても、それらはすべて形状を定義する同じ pathData を参照し、その文字列を変更すると、すべてのバージョンが更新されます。

于 2016-03-01T10:20:26.920 に答える