创建一个完全空的Drawable似乎是一个常见的需求,作为占位符、初始状态等,但在XML中好像没有很好的方法来实现...。有几个地方提到了系统资源@android:drawable/empty
,但据我所知(即它不在参考文档中,并且aapt会报错说找不到该资源),这是不存在的。
是否有一般的方法来引用一个空的Drawable,或者你最终只能为每个项目创建一个假的空PNG?
创建一个完全空的Drawable似乎是一个常见的需求,作为占位符、初始状态等,但在XML中好像没有很好的方法来实现...。有几个地方提到了系统资源@android:drawable/empty
,但据我所知(即它不在参考文档中,并且aapt会报错说找不到该资源),这是不存在的。
是否有一般的方法来引用一个空的Drawable,或者你最终只能为每个项目创建一个假的空PNG?
当我试图使用@android:id/empty
来创建一个空的可绘制对象时,它对我没有起作用。对我而言,@android:color/transparent
才是正确的选择。
ShapeDrawable
,即创建自己的可绘制/empty.xml文件,其中只包含<shape/>
。<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>
使用@android:color/transparent
,并在<selector>
上添加android:constantSize="true"
对我来说,使用@android:drawable/empty会显示错误并防止编译。使用@android:id/empty修复了错误并让我能够编译,但在Eclipse布局编辑器中显示“NullPointerException:null”。我将其更改为@android:color/transparent,现在一切都正常。
我还不能投票,否则我会点赞Emil的回答。
@null
与在Java中使用null
作为Drawable
具有相同的效果。请注意保留HTML标记。我有同样的问题。我的应用程序因为空向量图像而崩溃。通过添加一个透明/不可见路径元素,我解决了这个问题。我在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>
Kai,我不知道为什么会出现这种情况,但我也遇到了同样的问题。我认为这可能与你编译的Android版本有关。无论如何,我发现只需在您使用 @android:drawable/empty 的地方使用 @android:id/empty 即可解决问题。
Drawable
图像,您可以使用带有透明颜色的ShapeDrawable
:val shapeDrawable = ShapeDrawable(OvalShape())
shapeDrawable.paint.color = context.getColor(android.R.color.transparent)
shapeDrawable.intrinsicWidth = 100
shapeDrawable.intrinsicHeight = 100