如何结合三元运算符使用wrap_content设置Android视图高度
解决DataBinding动态设置layout_height的问题
问题根源:
wrap_content是Android框架的布局常量(对应ViewGroup.LayoutParams.WRAP_CONTENT),不能直接在XML的DataBinding表达式里直接引用;230dp是尺寸字面量,DataBinding无法直接解析成布局参数需要的像素值。
方案一:利用DataBinding内置工具类转换
在表达式里通过Dp类转换固定尺寸,同时引用WRAP_CONTENT常量:android:layout_height="@{vm.active ? ViewGroup.LayoutParams.WRAP_CONTENT : Dp(230).toPx()}"需在XML的
<data>标签里导入对应类:<data> <import type="android.view.ViewGroup"/> <import type="androidx.databinding.Dp"/> </data>方案二:通过资源文件定义尺寸
- 在
res/values/dimens.xml中定义固定高度:
<dimen name="fixed_height">230dp</dimen>- 在XML的DataBinding表达式中引用:
android:layout_height="@{vm.active ? ViewGroup.LayoutParams.WRAP_CONTENT : @dimen/fixed_height}"同样需要导入
ViewGroup类。- 在
方案三:自定义BindingAdapter(更灵活)
如果需要频繁处理这类动态布局参数,可自定义BindingAdapter:@BindingAdapter("app:dynamicHeight") fun setDynamicHeight(view: View, isActive: Boolean) { val params = view.layoutParams params.height = if (isActive) { ViewGroup.LayoutParams.WRAP_CONTENT } else { view.resources.getDimensionPixelSize(R.dimen.fixed_height) } view.layoutParams = params }然后在XML中直接使用自定义属性:
app:dynamicHeight="@{vm.active}"
内容的提问来源于stack exchange,提问作者Jaejun Lee
相关产品推荐
相关产品推荐

