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

JPv*_*rwe 20 android drawable

我正在忙着创建一个不太复杂的版本,NinePatchDrawable用于平铺内部面板而不是拉伸它们.

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

但是,我找不到有关如何Drawable在XML文件中使用它的文档.这可能吗?也就是说,我可以用一个<tileable-nine-patch>或者一些这样的标签来定义资源吗?

Cha*_*ley 26

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

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

更新:

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

  • 根据 [Drawable](https://developer.android.com/reference/android/graphics/drawable/Drawable.html) 文档:“_Starting in API 24, custom drawables classes may be used in XML._”。我希望将此功能添加到 Compat 库中只是时间问题。 (2认同)

Cas*_*ais 8

从 Android API 24 开始,自定义 Drawables 类只能在您的包内的 XML 中使用。

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

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

<com.yourapp.MyCustomDrawable
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="#ffff0000"/>
Run Code Online (Sandbox Code Playgroud)

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

<drawable xmlns:android="http://schemas.android.com/apk/res/android"
 class="com.myapp.MyTopLevelClass$InnerCustomDrawable"
 android:color="#ffff0000" />
Run Code Online (Sandbox Code Playgroud)

注意:支持库不支持。

  • 三个问题:1) 哪些 XML 文件可以/需要放入这些声明?我的意思是在布局、可绘制对象等中。 2) 当应用程序在 API &lt; 24 上运行时会发生什么?3) 在你的例子中使用 `android:color` 的目的是什么? (6认同)