Ash*_*lak 5 java data-binding android android-databinding android-6.0-marshmallow
我试图将一些自定义字体应用于我的TextView一行,如Lisa Wray的帖子所述.这TextView是一个项目的一部分RecyclerView
我已将数据绑定依赖项添加到我的顶级构建文件中.
classpath 'com.android.tools.build:gradle:1.3.0'
classpath "com.android.databinding:dataBinder:1.0-rc1"
Run Code Online (Sandbox Code Playgroud)
我也将插件应用到我的主模块:
apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
Run Code Online (Sandbox Code Playgroud)
这是item.xml将添加到的文件RecyclerView.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools">
<data></data>
<android.support.v7.widget.CardView
android:id="@+id/card_view"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="100dp"
android:layout_height="130dp"
android:layout_gravity="center"
card_view:cardCornerRadius="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="100dp"/>
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:font="@{@string/font_yekan}"/>
</LinearLayout>
</android.support.v7.widget.CardView>
</layout>
Run Code Online (Sandbox Code Playgroud)
我添加了一个layout根元素并app:font="@{@string/font_yekan}"结合了一个静态setter方法:
@BindingAdapter({"bind:font"})
public static void setFont(TextView textView, String fontName) {
textView.setTypeface(Typeface.createFromAsset(textView.getContext().getAssets(), "fonts/" + fontName));
}
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.但是当我运行程序时,字体不会改变.但是,当我删除上面的静态方法时,我收到以下错误:
找不到参数类型为java.lang.String的属性'app:font'的setter.
所以数据绑定框架已经识别出绑定的东西,但是setter方法没有被调用(Logs不打印输出).
这里有什么问题?
小智 6
提供上述布局和设置,假设如下:
RecyclerView适配器内部,您可以通过以下方式之一绑定视图:在适配器类的onCreateViewHolder方法中
@Override
public MyAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.recycler_item,
parent, false);
return new MyHolder(binding.getRoot());
}
Run Code Online (Sandbox Code Playgroud)或者在其onBindViewHolder方法中
@Override
public void onBindViewHolder(MyAdapter.MyHolder holder, int position) {
DataBindingUtil.bind(holder.itemView);
//...
}
Run Code Online (Sandbox Code Playgroud)您的资源文件夹应类似于:
您的字符串资源文件应具有字体的完全限定名称:
<string name="kenyan">kenyan_rg.ttf</string>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |