我正在忙于创建一个不太复杂的NinePatchDrawable
版本,它会对内部面板进行平铺而不是拉伸它们。
我可以实现实际的逻辑来进行渲染等。
但是,我找不到有关如何在XML文件中使用此Drawable
的文档。这可能吗?也就是说,我可以使用<tileable-nine-patch>
或某些此类标记来定义资源吗?
答案 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">