如何在android中创build自定义数据绑定? (android studio)

我想实现自定义函数从ImageView下载像这样的app:imageUrl="@{status.imageUrl}"图像app:imageUrl="@{status.imageUrl}"在下面的代码:

  <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="status" type="com.databinding.data.Status" /> </data> <RelativeLayout android:id="@+id/status_container" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/status_avatar" android:layout_width="64dp" android:layout_height="64dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:contentDescription="@null" app:imageUrl="@{status.imageUrl}"/> </RelativeLayout> </layout> 

如何编写这个可以从@{status.imageUrl}下载图像自动化的函数? 使用这个库com.android.databinding

Related of "如何在android中创build自定义数据绑定? (android studio)"

对于这个工作,你需要一个类似于android数据绑定库的库 。
在这个库中,首先将下面的脚本添加到build.gradle项目中:

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' classpath 'com.android.databinding:dataBinder:1.0-rc4' } } 

并将此代码添加到模块文件的build.gradle顶部:

 apply plugin: 'com.android.databinding' 

并创build你的类,例如: class BindingCustom并写下这个代码:

 public class BindingCustom { @BindingAdapter({"imageUrl"}) public static void loadImage(final ImageView view, String url) { Picasso.with(view.getContext()).load(url).into(view); } } 

BindingCustom类中,你有loadImage方法来以你感兴趣的方式从URL下载图像,但是我使用Picasso库,因为它是这个工作的常用库,你可以把它改成你的代码。

这是一个有用的链接了解更多信息

以下是我喜欢的:

首先做一个自定义的类扩展窗体的图像视图

 import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.widget.ImageView; public class MyImageView extends ImageView { public MyImageView(Context context) { super(context); downloader(null); } public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); downloader(attrs); } public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); downloader(attrs); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public MyImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); downloader(attrs); } private void downloder(AttributeSet attr){ // TAKE THE LINK AND DOWNLOAD IMAGE HERE } } 

其次在res文件夹中声明一个样式

 <declare-styleable name="MyImageView"> <attr name="imageUrl" format="string"/> </declare-styleable> 

最后让我们做我们的下载器function

 private void downloader(AttributeSet attrs) { if (attrs!=null) { TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MyImageView); String url = a.getString(R.styleable.MyImageView_imageUrl); // First check whether we have such a property then // DOWNLOAD IT WITH ANY LIBRARY YOU LIKE // in this case i used IMAGE LOADER if(url!=null) ImageLoader.getInstance().displayImage(url,this); } } 

现在您可以轻松地将链接添加到您的XML中

  <com.raianraika.example.MyImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:imageUrl="www.google.com"/>