Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android数据绑定布局宽度:必须提供布局宽度属性_Android_Android Layout_Width_Android Databinding - Fatal编程技术网

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}"
... />