我在TabLayout
类中使用数据绑定来扩充Activity
的布局。而且我被android:drawableBottom
内的TextView
数据绑定所困扰。我的布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" >
<data>
<variable
name="item"
type="<package-name>.HomeTabItem"/>
</data>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:maxLines="1"
android:text="@={item.name}"
android:textColor="@color/white"
android:drawableBottom="<What I have to-do here>"
android:textSize="@dimen/dimen_18" />
</layout>
Activity
类内部绑定的java代码如下:
private void setTabsLayoutItems() {
String tabItems[] = getResources().getStringArray(R.array.home_tab_items);
TypedArray tabItemsDrawable = getResources().obtainTypedArray(R.array.home_tab_items_drawable);
for (int i = 0; i < tabItems.length; i++) {
CustomTabBinding binding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.custom_tab, tabLayout, false);
int id = tabItemsDrawable.getResourceId(i, -1);
HomeTabItem obj = new HomeTabItem();
obj.setName(tabItems[i]);
obj.setIcon(id);
binding.setItem(obj);
View cropsTab = binding.getRoot();
tabLayout.addTab(tabLayout.newTab().setCustomView(cropsTab));
}
tabItemsDrawable.recycle();
}
HomeTabItem
课程如下:
public class HomeTabItem extends BaseObservable {
private String name;
private int icon;
@Bindable
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(com.sdei.farmx.BR.name);
}
@Bindable
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
notifyPropertyChanged(com.sdei.farmx.BR.icon);
}
}
答案 0 :(得分:1)
尝试直接设置iconID,如下所示:
android:drawableBottom="@{item.icon}"
如果它不起作用,则必须创建自定义绑定以进行设置。为此,请创建一个名为Bindings的最终类,并添加以下方法:
@BindingAdapter({"icon"})
public static void icon(TextView view, int iconId) {
view.setCompoundDrawables(null,null,null, view.getContext().getDrawable(iconId));
}
并在你的布局中调用它:
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:maxLines="1"
android:text="@={item.name}"
android:textColor="@color/white"
app:icon="@{item.icon}"
android:textSize="@dimen/dimen_18" />
</layout>