创建自定义Drawable并在XML中使用它

时间:2012-01-26 13:48:19

标签: android drawable

我正在忙于创建一个不太复杂的NinePatchDrawable版本,它会对内部面板进行平铺而不是拉伸它们。

我可以实现实际的逻辑来进行渲染等。

但是,我找不到有关如何在XML文件中使用此Drawable的文档。这可能吗?也就是说,我可以使用<tileable-nine-patch>或某些此类标记来定义资源吗?

3 个答案:

答案 0 :(得分:26)

遗憾的是,由于潜在的安全问题,无法在XML文件(针对API 23及更低版本)中使用自定义drawable。有关此主题的Google网上论坛主题,请参阅here,其中包含Android开发人员之一Romain Guy的回复。

但您仍然可以在Java代码中使用它们。

<强>更新

正如LeoFarage在评论中指出的那样,从API 24开始,您现在可以在XML文件中使用自定义drawable,但只能在您的应用程序包中使用。

答案 1 :(得分:4)

启动Android API 24,自定义Drawables类只能在您的包中以XML格式使用。

自定义drawables类可以多种方式在XML中使用:

使用完全限定的类名作为XML元素名称。对于此方法,自定义可绘制类必须是公共顶级类。

<com.yourapp.MyCustomDrawable
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="#ffff0000"/>

使用drawable作为XML元素名称并从class属性指定完全限定的类名。此方法可用于公共顶级类和公共静态内部类。

<drawable xmlns:android="http://schemas.android.com/apk/res/android"
 class="com.myapp.MyTopLevelClass$InnerCustomDrawable"
 android:color="#ffff0000" />

注意:支持库不支持。

答案 2 :(得分:1)

为时已晚,但是由于这里没有明确的答案,我尝试了什么。作为从Android文档复制的@Casabancais答案。

以此创建一个名为say custom_drawable.xml的可绘制xml

<?xml version="1.0" encoding="utf-8"?>
<drawable xmlns:android="http://schemas.android.com/apk/res/android"
    class="com.my.package.path.MyCustomDrawable"
    android:color="#ffff0000" />

com.mypackage.MyCustomDrawable.java应该是您的Java可绘制类

然后您可以在background标记中使用它来标记任何这样的xml

<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:background="@drawable/custom_drawable"
        android:layout_height="wrap_content">