为什么"启用"并且"按下"属性适用于ImageButton?

时间:2017-01-21 14:00:53

标签: android android-databinding android-imagebutton

在哪里可以看到Android中所有视图类型的所有属性列表?

我得到的印象是android:popupTheme="@style/MyCustomToolber" 没有ImageButtonenabled属性。至少,当我在XML中设置它们时,它们不起作用。我还找到了很多"指南"关于如何禁用和/或按下这些按钮。

同时,当我用数据绑定绑定它们时

pressed
他们刚刚工作过。按下并启用。在同一时刻 <ImageButton android:id="@+id/locate_button" android:layout_width="64dp" android:layout_height="64dp" android:layout_toRightOf="@id/bookmark_button" android:enabled="@{activity.locateEnabled}" android:pressed="@{activity.locatePressed}" android:onClick="@{activity.onLocateClick}" android:src="@drawable/locate_selector" android:background="@null" /> 甚至被Android Studion拼写检查报告为未知属性!

那么,它是什么?

1)按照设计行为,我只是不明白(什么?)

2)来自数据绑定库的糖

3)黑客攻击

4)????

如何知道这个功能有多普拉?

1 个答案:

答案 0 :(得分:3)

答案是1和2.数据绑定允许您使用属性来调用View上的任何setter。您可以查看data binding guide's section on attribute setters

当您设置android:enabled属性时,您正在使用Android数据绑定自动设置程序来调用setEnabled()。 Android数据绑定会查看属性名称(已启用)并查找具有该名称的setter并查找setEnabled()android:pressed也是如此 - 有setPressed()方法。是的约会!

android:onClick是一个真实的属性,但数据绑定并不使用它。也没有setOnClick()方法。相反,有Binding Adapter设置OnClickListener来调用您的onLocateClick()方法。这涉及到一些神奇的东西,依赖于数据绑定用于检查代码的注释处理器,但足以说它在编译时执行此操作而不是使用运行时反射。

所有事件侦听器都应该为它们编写与事件名称相同的绑定适配器(而不是侦听器名称)。因此,您也可以设置android:onLongClick。您可能也对lambda syntax for events感兴趣。

我不确定你的意思是什么?便携式。&#34;数据绑定至少可以用于Gingerbread(我们声称Froyo,但实际上,谁是Froyo的目标?),但是你无法将它转移到iOS或类似的东西。所有Android数据绑定都是通过一个小的运行时库和生成的代码完成的。您不必担心Android的特定版本。