Android 使用数据绑定设置布局\u边距

Android 使用数据绑定设置布局\u边距,android,mvvm,android-databinding,Android,Mvvm,Android Databinding,我在我的应用程序中使用数据构建,对此我是新手。 我无法更改左侧代码的布局。 我见过许多例子,但它们对我不起作用。 这是我在模型中的代码 @BindingAdapter("android:layout_marginLeft") public static void setLayoutMarginLeft(View view, float marginLeft) { if (view.getLayoutParams() instanceof ViewGroup.Margi

我在我的应用程序中使用数据构建,对此我是新手。 我无法更改左侧代码的布局。 我见过许多例子,但它们对我不起作用。 这是我在模型中的代码

@BindingAdapter("android:layout_marginLeft")
public static void setLayoutMarginLeft(View view, float marginLeft) {
    if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        p.setMargins((int) marginLeft, p.topMargin, p.rightMargin, p.bottomMargin);
        view.requestLayout();
    }
}
xml文件

<data>
    <import type="android.view.View" />
    <variable
        name="viewModel"
        type="com.aofled.test.window.activity.sleep.SleepActivityViewModel" />
</data>

<TextView
            android:id="@+id/tv_sleep"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tap to screen....."
            android:textColor="@color/selector_inactive"
            android:textSize="48sp"
            android:layout_marginLeft="@{viewModel.layout_marginLeft}"
            />

我应该做些什么来让它工作呢?

嗯,我找到了解决问题的办法。 我希望有人能帮忙

My.xml

<data>
    <import type="android.view.View" />
    <variable
        name="viewModel"
        type="com.kohote.homecare.window.activity.sleep.SleepActivityViewModel" />
</data>

<TextView
            android:id="@+id/tv_sleep"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sleep_mode_text"
            android:textColor="@color/selector_inactive"
            android:textSize="48sp"
            app:layout_marginLeft="@{viewModel.marginLeft}"
            />

这是一个工作版本。

您如何定义
SleepActivityViewModel
中的
layout\u marginLeft
属性?显然,错误表明它无法在viewmodel中找到
layout\u marginLeft
的getter。它位于SleepActivityViewModel中。这与我问题的顶部的代码相同@BindingAdapter(“android:layout_marginLeft”)公共静态无效setLayoutMarginLeft(视图视图,浮动marginLeft){if(View.getLayoutParams()实例为ViewGroup.MarginLayoutParams){ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams)视图.getLayoutParams();p.SetMargin((int)marginLeft,p.topMargin,p.rightMargin,p.bottomMargin);view.requestLayout();}}}在
SleepActivityViewModel
中,
{viewModel.layout\u marginLeft}
的getter看起来像什么
android:layout_marginLeft
@{viewModel.layout_marginLeft}
。您已经为
android:layout\u marginLeft
提供了绑定适配器。问题中有密码。第二部分
@{viewModel.layout\u marginLeft}
是从
SleepActivityViewModel
获取属性
layout\u marginLeft
。此属性必须有一些getter。编译器正在抱怨缺少或定义错误的getter。目前,只有我在顶部添加的getter。我应该在代码中添加其他内容吗?谢谢你的解决方案。这对我也很有效。
<data>
    <import type="android.view.View" />
    <variable
        name="viewModel"
        type="com.kohote.homecare.window.activity.sleep.SleepActivityViewModel" />
</data>

<TextView
            android:id="@+id/tv_sleep"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/sleep_mode_text"
            android:textColor="@color/selector_inactive"
            android:textSize="48sp"
            app:layout_marginLeft="@{viewModel.marginLeft}"
            />
public ObservableField<Float> marginLeft = new ObservableField<>();


@BindingAdapter({"bind:layout_marginLeft"})
public static void setLayoutMarginLeft(TextView view, float marginLeft) {
    if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        p.setMargins((int) marginLeft, p.topMargin, p.rightMargin, p.bottomMargin);
        view.requestLayout();
    }
}
marginLeft.set(100f, 900f);