在Android中创建一个空的Drawable

47

创建一个完全空的Drawable似乎是一个常见的需求,作为占位符、初始状态等,但在XML中好像没有很好的方法来实现...。有几个地方提到了系统资源@android:drawable/empty,但据我所知(即它不在参考文档中,并且aapt会报错说找不到该资源),这是不存在的。

是否有一般的方法来引用一个空的Drawable,或者你最终只能为每个项目创建一个假的空PNG?

9个回答

102

当我试图使用@android:id/empty来创建一个空的可绘制对象时,它对我没有起作用。对我而言,@android:color/transparent才是正确的选择。


14
我使用一个空的ShapeDrawable,即创建自己的可绘制/empty.xml文件,其中只包含<shape/>

11
<shape />

创建一个空形状对我很有帮助。或者创建一个名为empty_drawable.xml的文件,其中包含以下内容:

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

因此,您可以在其他地方使用它。

您还可以通过创建my_disablable_view.xml文件,在未启用其所在视图时使形状消失:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true">
        <shape android:shape="oval">
            <size android:height="10dp" android:width="10dp" />
            <solid android:color="@android:color/white" />
        </shape>
    </item>
    <item android:state_enabled="false">
        <shape />
    </item>
</selector> 

6

使用@android:color/transparent,并在<selector>上添加android:constantSize="true"


5

对我来说,使用@android:drawable/empty会显示错误并防止编译。使用@android:id/empty修复了错误并让我能够编译,但在Eclipse布局编辑器中显示“NullPointerException:null”。我将其更改为@android:color/transparent,现在一切都正常。

我还不能投票,否则我会点赞Emil的回答。


5
在XML中使用@null与在Java中使用null作为Drawable具有相同的效果。请注意保留HTML标记。

我希望这个能够工作,但是如果我在drawable XML中使用它,并将其设置为layout XML中的背景,我会得到错误信息“<item>标签需要一个'drawable'属性或定义drawable的子标签”。 - androidguy

2

我有同样的问题。我的应用程序因为空向量图像而崩溃。通过添加一个透明/不可见路径元素,我解决了这个问题。我在API 22和30上进行了测试。

ic_empty.xml:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
   android:width="24dp"
   android:height="24dp"
   android:viewportWidth="24"
   android:viewportHeight="24">
       <path android:strokeAlpha="0" android:pathData="M0,12h24"/>
</vector>

2

Kai,我不知道为什么会出现这种情况,但我也遇到了同样的问题。我认为这可能与你编译的Android版本有关。无论如何,我发现只需在您使用 @android:drawable/empty 的地方使用 @android:id/empty 即可解决问题。


2
为了创建一个空的Drawable图像,您可以使用带有透明颜色的ShapeDrawable
val shapeDrawable = ShapeDrawable(OvalShape())
shapeDrawable.paint.color = context.getColor(android.R.color.transparent)

如果图像尺寸很重要,请使用:
shapeDrawable.intrinsicWidth = 100
shapeDrawable.intrinsicHeight = 100

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接