代码之家  ›  专栏  ›  技术社区  ›  skyfoot

用Android在xml中使用ShapeDrawable绘制多个形状

  •  46
  • skyfoot  · 技术社区  · 15 年前

    我目前正在代码中的自定义视图中的画布上绘制一些圆。圆圈是静态的,不会改变。我想用xml中的ShapeDrawable来帮助清理代码。我将有许多不同的可抽取的用户可以选择,因此我不想在代码中这样做。有3或4个xml可绘制文件对我来说似乎要整洁得多。

    我使用ShapeDrawable在xml中创建了一个圆,但无法向xml添加多个形状。

    如何使用ShapeDrawable向xml文档添加多个形状。

    2 回复  |  直到 15 年前
        1
  •  85
  •   Kenton Price    15 年前

    下面是我如何用一个一像素的黑色边框填充红色圆圈,中间是一个白色数字72:

    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="oval">
                <solid android:color="@android:color/black" />
            </shape>
        </item>
        <item android:top="1dp" android:left="1dp" android:right="1dp" android:bottom="1dp">
            <shape android:shape="oval">
                <solid android:color="@android:color/red" />
            </shape>
        </item>
    </layer-list>
    

    然后,要在布局中使用它,请声明如下:

    <TextView
        android:text="72"
        android:textSize="14dp"
        android:textStyle="bold"
        android:background="@drawable/red_circle_black_border" 
        android:layout_width="22dp"
        android:layout_height="22dp"
        android:gravity="center_vertical|center_horizontal"
        android:textColor="@android:color/white" />
    

    显然,根据需要更改文本大小和布局的宽度/高度:-)

        2
  •  47
  •   skyfoot    12 年前

    我想我已经找到了一个使用层列表向xml文件添加多个形状的解决方案。 我还没有尝试过,但这似乎不是我想要的,因为形状将按照其数组索引的顺序绘制。

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
       <item>
          <shape>
             <solid android:color="#FFF8F8F8" />
          </shape>
       </item>
       <item android:top="23px">
          <shape>
             <solid android:color="#FFE7E7E8" />
          </shape>
       </item>
    </layer-list>
    

    Blog post

    Android docs