具有图层列表背景可绘制的自定义视图呈现黑屏

Posted

技术标签:

【中文标题】具有图层列表背景可绘制的自定义视图呈现黑屏【英文标题】:Custom View with Layer-List background drawable renders black screen 【发布时间】:2013-11-13 02:52:54 【问题描述】:

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

图层列表有两个项目:

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

这是可绘制的 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:
                android:color="@color/background_green" />
        </shape>
    </item>
</layer-list>

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

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

<view
    android:layout_
    android:layout_
    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 的设计器预览中。只有当我将它部署到设备时,它才会呈现黑色。

我在这里遗漏了什么明显的东西吗?

【问题讨论】:

【参考方案1】:

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

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

最后,Layer-List drawable 根本不需要。相反,将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:
        android:color="@color/background_green" />
    <solid android:color="@android:color/transparent" />
</shape>

【讨论】:

【参考方案2】:

试试这个。

<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:
                android:color="@color/background_green" />
        </shape>
   </item>
</layer-list>

【讨论】:

以上是关于具有图层列表背景可绘制的自定义视图呈现黑屏的主要内容,如果未能解决你的问题,请参考以下文章

鸿蒙HarMonyOS的自定义组件之抽奖大转盘

使用带有子类 UINavigationController 的自定义 iOS 7 过渡偶尔会导致黑屏

在自定义绘制的视图中动画大小变化的问题

如何使用 glide* 使用数组列表中的自定义适配器将图像设置为列表视图

如何在我绘制文本的自定义视图中使链接、电话号码可点击(与 textview 中的行为相同)?

图层可绘制/图层列表未在彼此之上绘制形状