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