在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);
当声明为第二个选项时,一切都按预期工作。
答案 0 :(得分:0)
我对此并不是100%肯定,但让我试一试。可能会发生一些事情。解析器可能无法正确理解class
属性(例如,它认为它是样式表的一部分)。我不确定解析器如何处理类属性,因为我从未见过或使用过它(实际上,我从未见过使用<View>
标记)。但是,更好的解释可能是:解析器试图将View
向下转换为packageName.myView
类并失败(向下转换总是有风险的;向上转换始终是安全的)。< / p>
无论发生什么,我都会使用您列出的第二个选项<packageName.myView android:id...>
,而不是使用<View>
标记。原因是,使用<View>
标签是多余的。此xml文件中的所有内容都必须是视图(LinearLayout,Button,TextView等都是View类的后代)。
希望有所帮助。如果你真的非常好奇,你可以随时下载解析器的源代码......