C# LayoutParams更改仅在全屏模式下生效

C# LayoutParams更改仅在全屏模式下生效,c#,android,xamarin,mvvmcross,C#,Android,Xamarin,Mvvmcross,我使用Xamarin和MvvmCross 我做了一个带有recyclerView的片段对话框,列表是通过xml文件上的绑定填充的,所以我没有适配器,我应该这样保存它 如果我没有错,没有内置的方法使recyclerView只获取其内容所需的大小,这应该不是一个问题,但在这种情况下,我需要列表从底部开始 所以我做了这个(这是一个定制的全屏对话框): 但是看起来并不是那么容易,当对话框不是全屏显示时,layoutParams的更改似乎没有效果,它只是什么都不做 我的方法正在被调用,我得到了正确的项目高

我使用Xamarin和MvvmCross

我做了一个带有recyclerView的片段对话框,列表是通过xml文件上的绑定填充的,所以我没有适配器,我应该这样保存它

如果我没有错,没有内置的方法使recyclerView只获取其内容所需的大小,这应该不是一个问题,但在这种情况下,我需要列表从底部开始

所以我做了这个(这是一个定制的全屏对话框):

但是看起来并不是那么容易,当对话框不是全屏显示时,layoutParams的更改似乎没有效果,它只是什么都不做

我的方法正在被调用,我得到了正确的项目高度,它只是不改变recyclerview高度

请注意,在创建时设置全屏,并在recyclerview参数更改后清除标志

看起来它只在全屏模式下工作

有人能解释一下吗


提前感谢。

正如您所说,RecyclerView不知道它的大小。 自从上次更新支持库以来,它是

RecyclerView小部件为创建列表和网格以及支持动画提供了高级和灵活的基础。此版本为LayoutManager API带来了一个激动人心的新特性:自动测量!这允许RecyclerView根据其内容的大小调整自身大小。这意味着以前不可用的场景,例如对RecyclerView的维度使用WRAP_内容,现在是可能的。您会发现所有内置的LayoutManager现在都支持自动测量


我建议等待Xamarin包装的lib(已经有一个beta版)

正如您所说,RecyclerView不知道它的大小。 自从上次更新支持库以来,它是

RecyclerView小部件为创建列表和网格以及支持动画提供了高级和灵活的基础。此版本为LayoutManager API带来了一个激动人心的新特性:自动测量!这允许RecyclerView根据其内容的大小调整自身大小。这意味着以前不可用的场景,例如对RecyclerView的维度使用WRAP_内容,现在是可能的。您会发现所有内置的LayoutManager现在都支持自动测量


我建议等待Xamarin包装的lib(已经有beta版)

我在没有recyclerView的情况下完成了这项工作,很高兴下次再了解这一点,但我的问题是我的解决方案在没有全屏的情况下无法工作……我在没有recyclerView的情况下完成了这项工作,很高兴下次再了解这一点,但我的问题是我的工作环境在没有全屏的情况下无法工作。。。
        MvxRecyclerView list = Dialog.FindViewById<MvxRecyclerView>(Resource.Id.recyclerview);
        list.LayoutChange += List_LayoutChange;
 private void List_LayoutChange(object sender, View.LayoutChangeEventArgs e)
    {
        MvxRecyclerView list = Dialog.FindViewById<MvxRecyclerView>(Resource.Id.recyclerview);

        int itemHeight = list.GetChildAt(0).Height;

        if (itemHeight != 0)
        {
            ViewGroup.LayoutParams prms = list.LayoutParameters;

            prms.Height = itemHeight * list.GetAdapter().ItemCount;

            list.LayoutParameters = prms;
            list.LayoutChange -= List_LayoutChange;
            list.RequestLayout();
        }
    }
    dialog.Window.AddFlags(WindowManagerFlags.Fullscreen);