11

我正在尝试构建一个自定义的 android 视图并应用一个作为图层列表的背景可绘制对象。

层列表有两个项目:

  1. 背景颜色(白色)
  2. 一个简单的可绘制形状,它是一个带有圆角的描边矩形

这是可绘制的xml:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white"/>
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <corners android:radius="1dp" />
            <stroke
                android:width="2dp"
                android:color="@color/background_green" />
        </shape>
    </item>
</layer-list>

自定义视图是从 Android.view.View 派生的一个类,除了所需的测量重载外,目前没有其他功能。

我在活动布局的视图定义中应用背景:

<view
    android:layout_width="match_parent"
    android:layout_height="300dp"
    class="com.example.widget.TestView"
    android:id="@+id/view2"
    android:layout_gravity="center_horizontal"
    android:background="@drawable/rect_sig_cap"
    android:layout_margin="20dp" />

期望看到的是一个白色背景和绿色边框的视图。我在部署项目时实际看到的是一个黑色背景和绿色边框的视图。

有趣的是,它正确显示在 Android Studio 的设计器预览中。只有当我将它部署到设备时,它才会呈现黑色。

我在这里遗漏了一些明显的东西吗?

4

2 回答 2

20

对于那些感兴趣的人,我找到了解决方案。

我已将可绘制形状定义为仅包含笔画定义。如果没有任何其他输入,这会导致填充颜色被推断为黑色。

最后,根本不需要 Layer-List 可绘制对象。相反,将solid填充定义添加到具有透明颜色的形状层,它工作得很好。

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="@dimen/corner_radius" />
    <stroke android:width="1dp"
        android:color="@color/background_green" />
    <solid android:color="@android:color/transparent" />
</shape>
于 2013-11-04T17:04:39.287 回答
-1

试试这个。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item>
    <color android:color="@color/white" />
   </item>
   <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <corners android:radius="1dp" />
            <stroke
                android:width="2dp"
                android:color="@color/background_green" />
        </shape>
   </item>
</layer-list>
于 2019-11-14T14:20:33.253 回答