我正在忙于创建一个不那么复杂的NinePatchDrawable
版本,它可以平铺内部面板而不是拉伸它们。
我可以实现实际的渲染逻辑等功能。
但是,我找不到有关如何在XML文件中使用此Drawable
的文档。这是否可能?也就是说,我是否可以使用<tileable-nine-patch>
或类似的标记来定义资源?
很遗憾,由于潜在的安全问题,无法在XML文件中使用自定义可绘制项(API 23及以下版本)。请参见此处一个关于这个问题的Google Groups讨论帖子,并附有Android开发人员之一Romain Guy的回复。
然而,您仍然可以在Java代码中使用它们。
更新:
正如LeoFarage在评论中指出的那样,从API 24开始,您现在可以在XML文件中使用自定义可绘制项,但仅限于您的应用程序包内部。
从Android API 24开始,自定义的Drawable类只能在您的包内部使用XML。
自定义的drawable类可以通过多种方式在XML中使用:
使用完全限定的类名作为XML元素名。对于这种方法,自定义的drawable类必须是一个公共的顶级类。
<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" />
注意:这不受支持库支持。
android:color
的目的是什么? - Alexander Abakumov<?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可绘制类。
然后,您可以在任何类似以下 XML 的标记中使用它,例如 background
标记。
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:background="@drawable/custom_drawable"
android:layout_height="wrap_content">