如何在图层列表中设置可绘制的大小

时间:2011-08-18 09:14:50

标签: android list android-layout size drawable

我在设置图层列表中的drawable大小时遇到​​问题。我的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的原始大小?我不希望它调整大小。我尝试设置宽度和高度,但这不起作用。另外drawables实际上不是位图,它们是selectos,所以我不能使用位图技巧。


通过使用“left”和“right”看起来我有一半的解决方案,但是,这仍然不能让我自动设置图像的确切大小。现在我的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>

5 个答案:

答案 0 :(得分:5)

您可以将 android:width android:height 参数与所需的值一起使用。

下面是示例可绘制图层列表和屏幕截图。我使用了谷歌material icons中的矢量drawable和自己的选择器drawable。

原始circle.xml可绘制形状的大小为100dp x 100dp,但是在drawable.xml中,我将此值重写为24dp x 24dp android:width android: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

答案 1 :(得分:3)

您可以为此使用插入标记。 例如

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch add_mssql
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   csv/jobdetails.csv
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   db/test.db
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Person.js
#       README.MD
#       get_supervisorjobs.js
#       loadmsqlviews.js
#       mssql/
#       results.html
#       results.js
#       supervisorsNpositions.js

这会在你的menu_drawable2周围创建填充,所以它不会被缩放。只需设置所需的尺寸即可。

答案 2 :(得分:0)

希望这会有所帮助: - 您可以为menu_drawable2使用九个可绘制的补丁。你可以让menu_drawable2像边缘一样有透明区域。使用此透明区域指定九个修补程序中的可伸展区域。

答案 3 :(得分:0)

我也在Android 5.0(API 21)上遇到了这个问题。看来the gravity of item doesn't work for API less than 23。因此需要更新布局,我通过为第二个项目节点应用计算出的填充来使其兼容,该第二个项目节点应该是右上对齐的叠加层。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_svg_filter_black"/>

    <item
        android:left="16dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="16dp"
        android:drawable="@drawable/ic_circle_dot_red"
    />
</layer-list>

答案 4 :(得分:-3)

我不知道它的作品与否,但你是否试图将它们彼此分开?

类似的东西:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/menu_drawable1"/>
</layer-list>
<layer-list>
    <item android:drawable="@drawable/menu_drawable2"/>       
</layer-list>

或者把它们放在其他东西之间,就像高度和宽度为0dp的空布局一样。