android的layout_width,java – Android数据绑定layout_width和layout_height

我需要能够动态设置EditText的height属性.我在我的应用程序中使用数据绑定其他属性,所以我希望能够使用数据绑定来控制我的元素的高度.这是我的xml的精简版:

xmlns:app="http://schemas.android.com/apk/res-auto">

android:id="@+id/txtVerificationCode"

android:layout_height="@{loginVM.compact ? @dimen/verificationHeightCompact : @dimen/verificationHeightFull}"

android:layout_width="match_parent"

android:paddingRight="16dp"

android:paddingLeft="16dp"

android:focusable="true"

android:focusableInTouchMode="true"

android:layout_marginLeft="10dp"

android:alpha="@{loginVM.verificationOpacity}"

android:layout_marginStart="10dp"

android:textAlignment="center"

android:visibility="visible"

android:hint="Enter verificationCode"

android:text="@{loginVM.verificationCode}" />

这是我的View模型的精简版:

public class LoginViewModel extends BaseObservable {

public final ObservableField verificationCode;

public final ObservableField compact;

@Bindable

public String getVerificationCode() {

if (this.verificationCode == null) {

return "";

} else {

return this.verificationCode.get();

}

}

public void setVerificationCode(String verificationCode) {

this.verificationCode.set(verificationCode);

invalidateProperties();

}

@Bindable

public Boolean getCompact(){return this.compact.get();}

public void setCompact(Boolean value)

{

this.compact.set(value);

this.invalidateProperties();

}

@BindingAdapter("android:layout_height")

public static void setLayoutHeight(EditText view, float height)

{

ViewGroup.LayoutParams layoutParams = view.getLayoutParams();

layoutParams.height = (int)height;

view.setLayoutParams(layoutParams);

}

public LoginViewModel(Context ctx) {

verificationCode = new ObservableField();

compact = new ObservableField();

}

维度位于dimens.xml文件中.我正在修改视图模型中的属性.但是,当我启动应用程序时,我在启动后立即收到以下错误(bindingadapter未在调试时触发).我在屏幕上还有其他几个元素,但是这个特殊的元素是我需要在特定动作发生时改变高度的元素:

FATAL EXCEPTION: main

Process: com.testing.stuff, PID: 32752

java.lang.RuntimeException: Unable to start activity

ComponentInfo{com.testing.stuff/com.testing.stuff.Login}:

java.lang.RuntimeException: Binary XML file line #69: You must supply

a layout_height attribute.

Caused by: java.lang.RuntimeException: Binary XML file line #69: You

must supply a layout_height attribute.

有关此问题的SO上有一些帖子,但没有确定的答案或方法不起作用.当然,这是一种常见的实施方式.先谢谢您的帮助.

解决方法:

在Java中

@BindingAdapter("layout_height")

public static void setLayoutHeight(View view, float height) {

LayoutParams layoutParams = view.getLayoutParams();

layoutParams.height = height;

view.setLayoutParams(layoutParams);

}

并在您的XML中

app:layout_height="@{ viewModel.isBig ? @dimen/dp_20 : @dimen/dp_5 }"

像这样导入应用程序

xmlns:app="http://schemas.android.com/apk/res-auto"

标签:android,java,mvvm,data-binding

来源: https://codeday.me/bug/20190928/1827447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值