可以用XML创建固定宽度的drawable吗?

kco*_*ock 11 android drawable xml-drawable layer-list

我正在尝试简化一些图形,要求每个密度需要9个补丁,只需使用XML drawable.这是一个相当简单的图形:

9-patch drawable

2段:

  • 两段都宽8dp
  • 顶部段高2dp
  • 底部区域填充视图
  • 右侧充满了透明度

设置为背景图像时给出此结果:

9-patch作为列表项示例

看起来这应该是相当简单的重新创建为XML drawable,并避免创建5个不同的9补丁图形.但是,我已经研究了图层列表drawables,插图drawables,clip drawables - 它们似乎都要求你事先知道视图的大小(例如,为了保持它的2dp,你需要设置insetRight为视图的宽度 - 2dp).我也尝试使用shape标签的size标签,但这并不是一个固定的大小,只是固定的比例(因此对于较高的视图,它将按比例缩放).

我是否忽略了一些简单的东西,或者这是我必须在布局后以编程方式检查的东西?

Leo*_*dos 4

这不可能。这是我找到的最好的解决方案。只有 xml,没有编码,没有位图,没有附加视图)

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

        <solid
            android:color="#ff0000" />
    </shape>
</item>
<item
    android:top="4dp">
    <shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">

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

<item
    android:left="10dp">
    <shape
        android:shape="rectangle">
        <solid
            android:color="#FFFFFF" />
    </shape>
</item> 
</layer-list>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

通过代码,您可以创建具有所需行为的自己的绘制类型。XML可绘制非常有限。恕我直言,我的建议最接近您的要求。