レイヤーリストでのドローアブルのサイズ設定に問題があります。私のXMLは次のようになります。
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/menu_drawable1"/>
<item Android:drawable="@drawable/menu_drawable2"/>
</layer-list>
Drawable1はDrawable2よりも大きいため、Drawable2はサイズ変更されます。これをオーバーライドしてDrawable2の元のサイズを設定する方法は?サイズを変更したくありません。幅と高さを設定してみましたが、うまくいきません。また、ドローアブルは実際にはビットマップではなく、selectosなので、ビットマップトリックを使用できません。
「左」と「右」を使用してソリューションの半分を得たように見えますが、それでも画像の正確なサイズを自動的に設定することはできません。今私のxmlは次のようになります:
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/menu_drawable1"/>
<item Android:drawable="@drawable/menu_drawable2" Android:right="150dp"/>
</layer-list>
Android:widthおよびAndroid:heightパラメータを必要な値で使用できます。
以下は、サンプルの描画可能なレイヤーリストとスクリーンショットです。私はgoogle material icons からのベクタードローアブルと独自のセレクタードローアブルを使用しました。
オリジナルのcircle.xmlドローアブル形状は100dp x 100dpサイズですが、drawable.xmlにこの値をAndroid:widthとAndroidで24dp x 24dpにオーバーライドします:heightパラメータ。
これがお役に立てば幸いです。
drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/circle" Android:height="24dp" Android:width="24dp"/>
<item Android:drawable="@drawable/ic_accessibility_black_24dp"/>
<item Android:drawable="@drawable/ic_http_white_24dp" Android:gravity="center" Android:top="-3dp" Android:height="5dp" Android:width="5dp"/>
</layer-list>
circle.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:innerRadius="20dp" Android:shape="oval">
<solid Android:color="#CCC" />
<size Android:width="100dp" Android:height="100dp"/>
</shape>
</item>
</selector>
これには挿入タグを使用できます。例えば
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/menu_drawable1"/>
<item>
<inset Android:drawable="@drawable/menu_drawable2"
Android:insetRight="50dp"
Android:insetTop="50dp"
Android:insetLeft="50dp"
Android:insetBottom="50dp" />
</item>
これにより、menu_drawable2の周囲にパディングが作成されるため、スケーリングされません。必要な寸法を設定するだけです。
これが役立つことを願っています:-menu_drawable2
には9つのパッチドローアブルを使用できます。 menu_drawable2
のように、エッジの周りに透明な領域を設けることができます。この透明な領域を使用して、9つのパッチで伸縮可能な領域を指定します。