Android-skin-support
Android-skin-support copied to clipboard
databinding设置adapter怎么支持?
trafficstars
databinding设置了adapter, 比如这种用法:
<Button
android:id="@+id/setting_mode_content"
drawable_isCommonTouch="@{true}"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="@dimen/dp_1"
android:gravity="center"
android:onClick="onClick"
android:paddingLeft="20dp"
android:paddingRight="20dp" />
生成的xml,databinding文件:
package com.yilahuo.driftbottle.databinding;
import com.yilahuo.driftbottle.R;
import com.yilahuo.driftbottle.BR;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.View;
@SuppressWarnings("unchecked")
public class ActivitySettingBindingImpl extends ActivitySettingBinding {
...
@Override
protected void executeBindings() {
long dirtyFlags = 0;
synchronized(this) {
dirtyFlags = mDirtyFlags;
mDirtyFlags = 0;
}
// batch finished
if ((dirtyFlags & 0x1L) != 0) {
// api target 1
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlBind, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlHmd, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlJcgx, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlQingli, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.rlTuijianPlp, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryDisturb, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryFeedBack, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryNotice, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.ryTeenagers, true);
databinding.ViewDrawableDatabinding.setCommonViewTouchBackground(this.settingModeContent, true);
}
}
...
}
// 使用adapter的文件:
/**
* @param view 需要设置的view按钮drawable
*/
@JvmStatic
@BindingAdapter(value = ["drawable_isCommonTouch"], requireAll = false)
fun setCommonViewTouchBackground(view: View, isCommonTouchBtn: Boolean) {
if (isCommonTouchBtn) {
setViewBackground(view,
GradientDrawable.Orientation.LEFT_RIGHT,
ContextCompat.getColor(view.context, R.color.gBackgroundColor),
ContextCompat.getColor(view.context, R.color.gBackgroundColor),
Color.TRANSPARENT, 0f,
ContextCompat.getColor(view.context, R.color.gBlack3Press),
0,
0,
Color.TRANSPARENT.toFloat(),
Color.parseColor("#DDDDDD"),
0,
0,
0f,
1f, 0f, 0f, 0f, 0f,
true
)
}
}
调试发现是没有走 executeBindings 方法,这种能实现吗?
暂时解决方法是将所有adapter中的属性放入到自定义属性中,然后自己实现一套DatabindingView来适配