是否可以创建使用API​​特定XML标记的自定义类?

时间:2012-01-27 19:08:38

标签: android xml

我正在尝试使用Drawable子类(在本例中为LayerDrawable)在xml中创建一个drawable,以用作View中的背景,但是drawable不计算和按照我的预期方式显示其图层。在这个论坛的帮助下,我找到了导致我的问题的特定源代码行,觉得我可以很容易地创建子类或更改代码或做我想做的事。

我的问题是,假设我创建了一个没有意外副作用的新课程而且我永远不需要访问旧功能,是否可以将新Drawableoriginal Drawable's xml tag structure一起使用(例如。layer-list)以同样的方式创建我更新的drawable?

例如,替换:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/resource_name"
        android:drawable=drawable/drawable_resource" />

</layer-list>

用这个:

<?xml version="1.0" encoding="utf-8"?>
<package.MyLayerDrawable xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/resource_name"
        android:drawable=drawable/drawable_resource" />

</package.MyLayerDrawable>

2 个答案:

答案 0 :(得分:3)

  

不允许从XML使用自定义drawable,主要是出于安全原因。 XML   drawable可以被其他进程(包括Launcher)作为资源加载   或者系统进程)并且随机运行第3个将是一个糟糕的主意   这些过程中的党代码。

非常不幸的是,他们决定彻底禁止它,而不是正确地沙盒化自定义绘图。

http://groups.google.com/group/android-developers/browse_thread/thread/825a5d8b401d3332

答案 1 :(得分:0)

像这样? :

 package your.packepage;

 public class RemoteImageView extends ImageView {
     ....
 }

 <your.packpage.RemoteImageView 
 android:id="@+id/img_id" 
 android:layout_width="10dp" 
 android:layout_height="fill_parent" 
 android:src="@drawable/ic_launcher" />