跟着官方教程学习数据绑定的用法,功能确实非常强大,这是 Android 向 MVVM 迈出的一大步,也是 Native 的开发方式逐渐向 Web 靠拢的一小步。

其中一个绑定方式是直接使用资源数据,例如:

android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"

官方教程截图:

完整版的布局文件如下:

<layout xmlns:android="http://schemas.android.com/apk/res/android">    <data class="ResourceBinding">        <variable name="large" type="boolean" />    </data>    <LinearLayout  android:layout_width="match_parent" android:layout_height="match_parent">        <TextView  android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}" android:background="@android:color/black" android:textColor="@android:color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />    </LinearLayout></layout>

largePaddingsmallPadding 都是定义在 dimens.xml 文件中的资源数据。

<dimen name="largePadding">20dp</dimen><dimen name="smallPadding">5dp</dimen>

在 Java 代码中与绑定 large 变量,并赋值为 ture

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);   ResourceBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_resource);    binding.setLarge(true);} 

理论上,这样做应该没什么问题,但是 Run 工程的时候,出现错误,报错信息如下:

cannot find the setter for attribute 'android:padding' on android.widget.TextView with parameter type float.

看来像是 DataBinder 把 @dimen/largePadding 解析成了 float 类型,可以试一下类型转换:

android:padding="@{large? (int)@dimen/largePadding : (int)@dimen/smallPadding}"

编译通过,运行结果也正确,应该是 DataBinder 出 bug 了,原来资源绑定还有这么高级的用法,可以直接进行类型转换 - (int)@dimen/largePadding

感觉好神奇,必须读读源码,了解一下 DataBinder 的实现原理。

更多相关文章

  1. Android 操作SQLite数据库(初步)-在程序中删除数据库
  2. android通过php连接mysql数据库!!!!
  3. Android接收jsp中动态生成的xml或json数据。
  4. 在Android中把SQLite的数据库文件存储在SD卡中【转】
  5. Android P系统设置之默认选择网络类型(4G,3G,2G)
  6. android数据库操作(二)
  7. Android的NDK开发(3)————JNI数据类型的详解
  8. Android如何导入已有的外部数据库

随机推荐

  1. 初识ViewPager【Android】
  2. android studio 使用getActionBar返回NUL
  3. Android优化技巧
  4. Android汉字转换成拼音
  5. Android中如何一次性finish掉以前打开的
  6. Android仿QQ空间
  7. Ubuntu 14 配置Android(安卓)Studio的快
  8. Android(安卓)TTS实现简单阅读器(一)
  9. 自定义Android Progress Bar的颜色
  10. android app中的给应用评分