Android数据绑定布局宽度:必须提供布局宽度属性
我试图约束视图的宽度和高度,但我看不出问题出在哪里 我发现这个 要为应用程序实现这些功能,请创建绑定适配器:Android数据绑定布局宽度:必须提供布局宽度属性,android,android-layout,width,android-databinding,Android,Android Layout,Width,Android Databinding,我试图约束视图的宽度和高度,但我看不出问题出在哪里 我发现这个 要为应用程序实现这些功能,请创建绑定适配器: @BindingAdapter("android:layout_width") public static void setLayoutWidth(View view, int width) { LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = width; view.setLay
@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, int width) {
LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = width;
view.setLayoutParams(layoutParams);
}
因此,我创建了如下绑定适配器:
public class SimpleBindingAdapter {
@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, int width) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = width;
view.setLayoutParams(layoutParams);
}
@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, int height) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = height;
view.setLayoutParams(layoutParams);
}
//Others methods...
}
<View
android:layout_width="@{paramsMessage.width}"
android:layout_height="@{paramsMessage.height}"
... />
然后试着像这样设置我的宽度和高度:
public class SimpleBindingAdapter {
@BindingAdapter("android:layout_width")
public static void setLayoutWidth(View view, int width) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = width;
view.setLayoutParams(layoutParams);
}
@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, int height) {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = height;
view.setLayoutParams(layoutParams);
}
//Others methods...
}
<View
android:layout_width="@{paramsMessage.width}"
android:layout_height="@{paramsMessage.height}"
... />
其中paramsMessage.width是公共int属性
但我得到了这个错误:
原因:java.lang.RuntimeException:二进制XML文件行#25:您
必须提供布局宽度属性。
在
android.content.res.TypedArray.getLayoutDimension(TypedArray.java:607)
在
ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:6761)
在
ViewGroup$MarginLayoutParams(ViewGroup.java:6930)
在
RelativeLayout$LayoutParams.(RelativeLayout.java:1244)
在
android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:1084)
在
android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:83)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:820)
在android.view.LayoutInflater.inflate(LayoutInflater.java:511)
在android.view.LayoutInflater.充气(LayoutInflater.java:415)
在
android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:116)
在
android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:88)
在
be.standard.appbusiness.tutorials.home.TutorialHomeFragment.onCreateDialog(TutorialHomeFragment.java:35)
在
android.support.v4.app.DialogFragment.GetLayoutFlater(DialogFragment.java:308)
在
FragmentManagerImpl.moveToState(FragmentManager.java:1067)
在
android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
在
android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
在
FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
在
android.support.v4.app.FragmentController.ExecutPendingActions(FragmentController.java:330)
在
android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
在
android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234)
位于android.app.Activity.performStart(Activity.java:6258)
在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2621)
在
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
在android.app.ActivityThread.access$900(ActivityThread.java:172)
在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:145)
位于android.app.ActivityThread.main(ActivityThread.java:5832)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
如果您能在这方面给予帮助,我将不胜感激,谢谢 绑定适配器方法必须位于作为数据传递的类中,在您的情况下,代码必须位于此对象paramsMessage的类中我认为问题不在于数据绑定<代码>布局\u宽度a
object ViewBindings{
@JvmStatic
@BindingAdapter("android:minWidth")
fun setLayoutWidth(view: View, width: Float) {
val layoutParams = view.layoutParams
layoutParams.width = (width * view.resources.displayMetrics.density).toInt()
view.layoutParams = layoutParams
view.invalidate()
}
@JvmStatic
@BindingAdapter("android:minHeight")
fun setLayoutHeight(view: View, height: Float) {
val layoutParams = view.layoutParams
layoutParams.height = (height * view.resources.displayMetrics.density).toInt()
view.layoutParams = layoutParams
view.invalidate()
}
}
fun Context.getDeviceDimensions(): Pair<Float, Float> {
var widthHeight = Pair(0.0F, 0.0F)
resources.displayMetrics.let {
val dpHeight = it.heightPixels / it.density
val dpWidth = it.widthPixels / it.density
widthHeight = Pair(dpWidth, dpHeight)
}
return widthHeight
}
class SomeController(val someFragment: SomeFragment){
fun getDeviceWidthDP(): Float{
val width = someFragment.context.getDeviceDimensions().first
return width
}
}
<View
android:layout_width="@{paramsMessage.width, default=@dimen/default_width}"
android:layout_height="@{paramsMessage.height, default=@dimen/default_height}"
... />