android如何更改<item>的宽度和高度

Asa*_*evo 33 xml android

我正在制作一个<layer-list>可绘制的.

我有我的背景图像,我希望第二层更小,但似乎无论我在我android:layer_width和我内部写的是什么android:layer_height.

第二层大小仍然相同.

这是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <item
        android:drawable="@drawable/picuser" 
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <item
        android:drawable="@drawable/ic_launcher" 
        android:layout_width="10dp"
        android:layout_height="10dp" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)

ozn*_*nus 31

这是一种解决方法,但它对我有用.
您可以使用填充以使第二个drawable更小.

<item android:drawable="@drawable/circyle" />

<item
    android:drawable="@drawable/plus" 
    android:top="10dp"
    android:bottom="10dp"
    android:right="10dp"
    android:left="10dp" />
Run Code Online (Sandbox Code Playgroud)

  • 我赞成,但现在注意到它似乎对我的菜单没有影响 (2认同)

amp*_*amp 18

我希望这会让你朝着正确的方向前进:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/picuser"/>

    <item>

        <bitmap
            android:src="@drawable/ic_launcher"
            android:gravity="center" />
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的,<item>没有layout_width/ layout_height属性.

  • 请给出解决方案,而不是说不. (26认同)
  • 从API 23开始,项目上有属性width,height,gravity (9认同)
  • 是的,我已经看过了,但是没有办法定义每一层的大小?它真的很重要.. (3认同)

Dav*_*zzo 14

不像有人说的那样,也有宽度和高度属性<item>.感谢@Entreco发布的演示.
android:widthandroid:height对于Drawables为类似android:layout_widthandroid:layout_heightViewS,不像它们可以被设置为既不match_parent也没有wrap_content,但你可以实现相同的行为match_parent由属性设置android:gravity要么left|rightstart|end(匹配父母的宽度),或top|bottom(匹配父母的高度).

不幸的是,这些属性仅在API 23之后可用.

但是,考虑到上面的方法我在地方的建议match_parent,并且android:widthandroid:height属性都可以用来<size>元素(其内要放<shape>)没有任何API限制,你可以使用一个简单的解决方法:

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

    <item>

        <shape
            android:shape="rectangle">

            <size
                android:width="152dp"
                android:height="152dp"/>

            <solid
                android:color="#00FFFFFF"/>
        </shape>
    </item>

    <item>

        <bitmap
            android:gravity="left|right|top|bottom"
            android:src="@mipmap/ic_launcher"/>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

上述解决方案利用了具有尺寸<item>(具有透明度<shape>)和未尺寸(具有a )的尺寸<bitmap>,其android:gravity设置left|top|right|bottom为匹配父母的尺寸.因此,该实际大小<bitmap>将由<item>同一父母中唯一大小的大小决定.

编辑:

感谢@Emil S,他注意到上述解决方案不能用作窗口背景.它只能作为任何视图的背景或前景正常工作.我不知道这种奇怪行为的特殊原因,但我可以猜测,当系统创建一个具有android:windowBackground属性指定的背景的窗口时,没有执行布局,因为尚未启动任何进程.因此,我认为,Android最终将在屏幕尺寸上光栅化可绘制并将其拉伸以填满整个窗口.这可以解释如何发生这种情况.

编辑:

@JoãoCarlos在使用自适应图标(由背景和forground制作的图标,支持矢量绘图)时,指出我的解决方案不起作用(因为它会导致循环继承).然而,他的观点是无意义的,因为自适应图标需要API 26:可以直接使用android:widthandroid:height在启动屏幕上使用(他们只需要API 23).
因此,为了得到任何Android设备中任何版本的工作,你需要diferentiate 2绘项目,前者为API <23,用我张贴的解决方案,并为后者API> = 23,用两个属性就像我之前说过几行文字一样.

  • 好主意,但接缝不起作用 (2认同)
  • 仅当您在支持`wrap_content`的东西中使用了层列表时,这才起作用。如果您尝试将其应用于初始屏幕,则将无法使用。花了我一些时间来解决这个问题,所以我在这里留下评论,这样其他人就不必花时间进行错误搜索了。 (2认同)

Ent*_*eco 10

从API Level 23及更高版本,您可以实际设置项目的宽度和高度

<item
    android:drawable="@drawable/splash_logo"
    android:height="100dp"
    android:width="100dp"/>
Run Code Online (Sandbox Code Playgroud)

注意:使用android:widthandroid:height不是android:layout_widthandroid:layout_height