我需要根据某些条件设置TextView的layout_height。我试过导入LayoutParams但它没有用。有任何想法吗?
android:layout_height="condition ? wrap_content : match_parent"
我需要在xml中使用而不是使用代码
您可以使用自定义Binding Adapter来完成。
创建绑定适配器,如下所示
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
很重要,因为在创建视图时应指定宽度和高度,是否在视图渲染的位时间之后发生绑定。
BindingAdapter
.因为Android不提供View.setWidth()
,所以可以通过类LayoutParams
设置大小,所以你必须使用LayoutParams
。你不能在xml中使用LayoutParams
,因为这里再没有View.setWidth()
方法。
这就是为什么下面的语法会给出错误
找不到参数类型为int的属性'android:layout_width'的setter
<data>
<import type="android.view.ViewGroup.LayoutParams"/>
<data>
android:layout_width="@{item.matchParent ? LayoutParams.MATCH_PARENT : LayoutParams.WRAP_CONTENT}"
View.setVisibility()
method available下面的语法有效
<data>
<import type="android.view.View"/>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>
<FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
我认为您使用ConstraintLayouts提供所有解决方案
if(a == b ) {
view.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
else
{
view.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
您应该通过LayoutParams更改它:
if(condition){
LayoutParams params = (LayoutParams) textView.getLayoutParams();
params.height = MATCH_PARENT;
textView.setLayoutParams(params);}
else{
LayoutParams params = (LayoutParams) textView.getLayoutParams();
params.height = WRAP_CONTENT;
textView.setLayoutParams(params);}
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="<package name>.UserModel" />
<import type="android.view.View"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="@{user.email.trim().length()>10 ? wrap_content : match_parent}""
android:layout_height="wrap_content"
android:text="@{user.email}" />
</RelativeLayout>
</layout>
在这里尝试这个我从here得到这个解决方案