web-dev-qa-db-ja.com

レイヤーリストで描画可能なサイズを設定する方法

レイヤーリストでのドローアブルのサイズ設定に問題があります。私の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>
30
Deimos

Android:widthおよびAndroid:heightパラメータを必要な値で使用できます。

以下は、サンプルの描画可能なレイヤーリストとスクリーンショットです。私はgoogle material icons からのベクタードローアブルと独自のセレクタードローアブルを使用しました。

オリジナルのcircle.xmlドローアブル形状は100dp x 100dpサイズですが、drawable.xmlにこの値をAndroid:widthAndroidで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>

screen shot

6
MrOnyszko

これには挿入タグを使用できます。例えば

<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の周囲にパディングが作成されるため、スケーリングされません。必要な寸法を設定するだけです。

3
Andrii Senkiv

これが役立つことを願っています:-
menu_drawable2には9つのパッチドローアブルを使用できます。 menu_drawable2のように、エッジの周りに透明な領域を設けることができます。この透明な領域を使用して、9つのパッチで伸縮可能な領域を指定します。

0
Akhilesh Kumar