gpt4 book ai didi

android - 如何根据 xml 中的条件设置 match_parent 和 wrap_content?

转载 作者:行者123 更新时间:2023-12-01 10:21:08 24 4
gpt4 key购买 nike

我需要根据某些条件设置 TextView 的 layout_height 。我尝试过导入 LayoutParams,但没有成功。有任何想法吗?

android:layout_height="condition ? wrap_content : match_parent"

我需要在 xml 中而不是使用代码

最佳答案

您可以使用自定义 Binding Adapter .

Create Binding Adapter as below

public class DataBindingAdapter {
@BindingAdapter("android:layout_width")
public static void setWidth(View view, boolean isMatchParent) {
ViewGroup.LayoutParams params = view.getLayoutParams();
params.width = isMatchParent ? MATCH_PARENT : WRAP_CONTENT;
view.setLayoutParams(params);
}
}
然后在您的 View 中使用此属性.
<TextView
android:layout_width="@{item.isMatchParent, default = wrap_content}"
...
/>
注: default = wrap_content很重要,因为在创建 View 时应该指定宽度和高度,是否在 View 渲染的位时间之后发生绑定(bind)。
解释
为什么没有 BindingAdapter 就不可能.
因为Android不提供 View.setWidth() , 大小可以按类设置 LayoutParams , 所以你必须使用 LayoutParams .您不能使用 LayoutParams在 xml 中,因为这里又没有 View.setWidth()方法。
这就是为什么下面的语法给出错误

Cannot find the setter for attribute 'android:layout_width' with parameter type int

<data>

<import type="android.view.ViewGroup.LayoutParams"/>

<data>

android:layout_width="@{item.matchParent ? LayoutParams.MATCH_PARENT : LayoutParams.WRAP_CONTENT}"
通过 xml 设置可见性有效,因为有 View.setVisibility()可用方法
以下语法有效
<data>
<import type="android.view.View"/>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>

<FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>

关于android - 如何根据 xml 中的条件设置 match_parent 和 wrap_content?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52361508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com