在xml中声明的自定义视图

时间:2011-11-11 11:04:09

标签: android android-xml

在xml中声明自定义视图时,声明自定义视图的视图或声明完全自定义视图之间有什么区别:

<LinearLayout>
<view class="packageName.MyView" android:id="@+id/myView" />
</LinearLayout>

<LinearLayout>
<packageName.myView android:id="@+id/myView" />
</LinearLayout> 

我已经创建了一个EditText的子类,当它被设置为View class=".."时,我的Activity在尝试访问MyView时崩溃了ClassCastException:

(MyView) myView = (MyView) findViewById(R.id.myView);

当声明为第二个选项时,一切都按预期工作。

1 个答案:

答案 0 :(得分:0)

我对此并不是100%肯定,但让我试一试。可能会发生一些事情。解析器可能无法正确理解class属性(例如,它认为它是样式表的一部分)。我不确定解析器如何处理类属性,因为我从未见过或使用过它(实际上,我从未见过使用<View>标记)。但是,更好的解释可能是:解析器试图将View向下转换为packageName.myView类并失败(向下转换总是有风险的;向上转换始终是安全的)。< / p>

无论发生什么,我都会使用您列出的第二个选项<packageName.myView android:id...>,而不是使用<View>标记。原因是,使用<View>标签是多余的。此xml文件中的所有内容都必须是视图(LinearLayout,Button,TextView等都是View类的后代)。

希望有所帮助。如果你真的非常好奇,你可以随时下载解析器的源代码......