我有BindingAdapter
喜欢
@BindingAdapter({ "onGlobalLayout" })
public static void setOnGlobalLayout(View view, ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener) {
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(onGlobalLayoutListener);
}
在XML中我有一个View
喜欢
<View
android:id="@+id/viewId"
bind:onGlobalLayout="@{viewModel.onLayoutListener}"
/>
在ViewModel中我有
public ViewTreeObserver.OnGlobalLayoutListener onLayoutListener(View view){
return new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// get x,y,width, height of view
}
};
}
现在我想将当前View
发送到ViewModel
,因此我将参数View view
添加到onLayoutListener
,但在XML中我不知道如何发送它。
任何帮助或建议将非常感谢
更新
感谢@pskink建议更好的方法来检查布局更改。
使用android:onLayoutChange
我不需要BindingAdapter
<View
android:id="@+id/viewId"
android:onLayoutChange="@{viewModel.onLayoutListener(viewId)}"
/>
爪哇
public View.OnLayoutChangeListener onLayoutUpdateWeightSuccessfulListener(final View v) {
return new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
// left, top
}
};
}
答案 0 :(得分:2)
只需传递您的View
ID即可,
bind:onGlobalLayout="@{viewModel.onLayoutListener(viewId)}"