Android 自定义视图 XML 中的复杂属性
Posted
技术标签:
【中文标题】Android 自定义视图 XML 中的复杂属性【英文标题】:Complex Attributes in Android Custom View XML 【发布时间】:2014-04-30 08:42:42 【问题描述】:我有一个关于自定义视图 XML 声明的问题。 我像往常一样使用自定义属性创建了自己的视图。现在我想添加更复杂的属性,如下所示:(这是非工作代码)
<com.xxx.yyy.CustomTextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_alignBottom="@+id/customTextView1"
android:layout_marginBottom="22dp"
android:layout_toRightOf="@+id/buttonBlack"
android:text="TextView" >
<Animation
animation:property1="123"
animation:property2="456" />
<Animation
animation:property1="789"
animation:property2="012" >
</Animation>
</com.xxx.yyy.CustomTextView>
我自己没有找到办法,但也许有人有想法。
谢谢!编辑:
我只是或多或少地很好地解决了这个问题。 我在名为 animations.xml 的 /res/xml 文件夹中创建了一个新的 .xml 文件
<animations>
<animation
name="Animation name 1"
float1="1.1"
float2="1.2"
integer1="11"
integer2="12" />
<animation
name="Animation name 2"
float1="2.1"
float2="2.2"
integer1="21"
integer2="22" />
</animations>
我在 attrs.xml 中的自定义视图包含一个用于从上面引用 animations.xml 文件的属性:
<declare-styleable name="MyTextView">
<attr name="animations" format="reference" />
</declare-styleable>
现在我在 MyTextView 的构造函数中解析引用的 .xml 文件,如下所述:http://thedevelopersinfo.com/2009/12/14/using-xml-file-resources-in-android/
也许这有时会帮助某人。
【问题讨论】:
您应该为此创建自定义 XML 属性,如下所述:developer.android.com/training/custom-views/… 【参考方案1】:除非CustomTextView
扩展ViewGroup
(或在它的类层次结构中)并且Animation
是您定义的自定义视图,否则这将不起作用。布局 XML 文件中只允许使用 Views
和 ViewGroups
(以及 Android 定义的一些特殊标签,如 include
和 merge
),并且只有 ViewGroup 元素可以有子元素。
【讨论】:
好的,谢谢!这正是我的想法。我只是希望有一种我还没有见过的方法。【参考方案2】:您可以像这样将自定义 XML 属性添加到自定义视图中:
<resources>
<declare-styleable name="YourCustomClass">
<attr name="someCustomAnimationAttribute" format="reference" />
</declare-styleable>
<resources>
这里描述了如何获得它:
http://developer.android.com/training/custom-views/create-view.html#applyattr
在你的布局中你必须声明一个命名空间:
xmlns:app="http://schemas.android.com/apk/res-auto"
然后像这样使用它:
<com.xxx.yyy.CustomTextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_alignBottom="@+id/customTextView1"
android:layout_marginBottom="22dp"
android:layout_toRightOf="@+id/buttonBlack"
android:text="TextView"
app:someCustomAnimationAttribute="@drawable/someAnimation">
这样您就可以通过 XML 提供这些动画,而不是将它们作为子元素添加,这是不可能的。
【讨论】:
我认为 OP 的主要关注点是如何在自定义视图中检索子 xml 标签,即<Animation />
正如@Karakuri 指出的那样,如果该自定义视图扩展ViewGroup
,则可以添加子视图(具有自定义参数的自定义子视图)。但是以这种方式提供动画是行不通的。
是的。我已经知道如何定义简单的属性。问题是是否可以将更复杂的属性定义为 XML 子元素。不过还是谢谢!以上是关于Android 自定义视图 XML 中的复杂属性的主要内容,如果未能解决你的问题,请参考以下文章