使用数据绑定设置layout_margin

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用数据绑定设置layout_margin相关的知识,希望对你有一定的参考价值。

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

@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}"
            />

我无法建立这个项目。我写:

**** /数据绑定错误****消息:找不到访问者com.aofled.test.window.activity.sleep.SleepActivityViewModel.layout_marginLeft文件:C:!work kohote_ch_android 4 kohotehc_android client src main res layout activity_sleep.xml loc:26:45 - 26:71 **** data binding error ****

我应该改变什么来使它工作?

答案

好吧,我找到了解决问题的方法。我希望有人会帮忙。

我们是.hml

<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

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);

这是一个工作版本。

以上是关于使用数据绑定设置layout_margin的主要内容,如果未能解决你的问题,请参考以下文章

使用绑定从片段访问父活动的 UI 元素

如何以编程方式设置 layout_margin? [复制]

实用代码片段将json数据绑定到html元素 (转)

Android之android:padding和android:layout_margin的区别

如何初始化片段中的绑定属性以使双向数据绑定工作

使用 MVVM 和数据绑定更改每个片段中的工具栏标题