为什么 "enabled" 和 "pressed" 属性适用于 ImageButton?
Why does "enabled" and "pressed" attributes work for ImageButton?
在哪里可以看到 Android 中所有视图类型的所有属性列表?
我的印象是 ImageButton
没有 enabled
和 pressed
属性。至少,当我在 XML 中设置它们时,它们不起作用。我还发现了很多关于如何使这些按钮禁用 and/or 按下的 "guides"。
同时,当我用数据绑定绑定它们时
<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"
/>
他们刚刚工作。既按下又启用。同时 pressed
甚至被 Android Studion 拼写检查报告为未知 属性!
那么,它是什么?
1) 设计行为,我只是不明白某些事情(什么?)
2) 来自数据绑定库的糖
3) 黑客攻击
4) ????
如何知道此功能的便携性如何?
答案是 1 和 2。数据绑定将允许您使用属性调用视图上的任何 setter。你可以看看data binding guide's section on attribute setters.
当您设置 android:enabled
属性时,您正在使用 Android 数据绑定的自动 setter 调用 setEnabled()
。 Android 数据绑定查看属性名称(已启用)并查找具有该名称的 setter 并找到 setEnabled()
。 android:pressed
也是如此——有一个setPressed()
方法。约定俗成!
android:onClick
是一个真正的属性,但数据绑定不使用它。也没有 setOnClick()
方法。相反,有一个 Binding Adapter 设置了一个 OnClickListener
来调用您的 onLocateClick()
方法。这其中有一点魔法依赖于数据绑定用来检查您的代码的注释处理器,但足以说明它在编译时执行此操作而不是使用运行时反射。
所有事件侦听器都应该为它们编写绑定适配器,并使用与事件相同的名称(而不是侦听器名称)。因此,您也可以设置 android:onLongClick
,例如。您可能还对 lambda syntax for events.
感兴趣
我不确定你所说的 "portable." 数据绑定至少可以用于姜饼(我们声称 Froyo,但实际上,谁以 Froyo 为目标?),但你将无法将它转移到 iOS 或类似的东西。所有 Android 数据绑定都是使用小型运行时库和生成的代码完成的。您不必担心 Android.
的特定版本
在哪里可以看到 Android 中所有视图类型的所有属性列表?
我的印象是 ImageButton
没有 enabled
和 pressed
属性。至少,当我在 XML 中设置它们时,它们不起作用。我还发现了很多关于如何使这些按钮禁用 and/or 按下的 "guides"。
同时,当我用数据绑定绑定它们时
<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"
/>
他们刚刚工作。既按下又启用。同时 pressed
甚至被 Android Studion 拼写检查报告为未知 属性!
那么,它是什么?
1) 设计行为,我只是不明白某些事情(什么?)
2) 来自数据绑定库的糖
3) 黑客攻击
4) ????
如何知道此功能的便携性如何?
答案是 1 和 2。数据绑定将允许您使用属性调用视图上的任何 setter。你可以看看data binding guide's section on attribute setters.
当您设置 android:enabled
属性时,您正在使用 Android 数据绑定的自动 setter 调用 setEnabled()
。 Android 数据绑定查看属性名称(已启用)并查找具有该名称的 setter 并找到 setEnabled()
。 android:pressed
也是如此——有一个setPressed()
方法。约定俗成!
android:onClick
是一个真正的属性,但数据绑定不使用它。也没有 setOnClick()
方法。相反,有一个 Binding Adapter 设置了一个 OnClickListener
来调用您的 onLocateClick()
方法。这其中有一点魔法依赖于数据绑定用来检查您的代码的注释处理器,但足以说明它在编译时执行此操作而不是使用运行时反射。
所有事件侦听器都应该为它们编写绑定适配器,并使用与事件相同的名称(而不是侦听器名称)。因此,您也可以设置 android:onLongClick
,例如。您可能还对 lambda syntax for events.
我不确定你所说的 "portable." 数据绑定至少可以用于姜饼(我们声称 Froyo,但实际上,谁以 Froyo 为目标?),但你将无法将它转移到 iOS 或类似的东西。所有 Android 数据绑定都是使用小型运行时库和生成的代码完成的。您不必担心 Android.
的特定版本