布局参数更改仅在全屏模式下生效

本文关键字:模式 参数 布局 | 更新日期: 2023-09-27 18:37:20

im 使用 Xamarin 和 MvvmCross。

我做了一个带有回收器视图的 FragmentDialog,该列表是通过 xml 文件上的绑定填充的,所以我没有适配器,我应该保持这种方式。

如果我没有错的话,没有内置的方法可以让 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);

但看起来它并不那么容易,当对话框不是全屏时,布局参数更改似乎没有效果,它只是什么都不做。

的方法被调用并且我得到了正确的项目高度,它只是不会改变回收器视图高度。

请注意,在创建时设置全屏并在回收器视图参数更改后清除标志有效

所以看起来它只能在全屏模式下工作。

有人可以对此有所了解吗?

提前谢谢。

布局参数更改仅在全屏模式下生效

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

http://android-developers.blogspot.fr/2016/02/android-support-library-232.html

RecyclerView 构件为创建列表和网格以及支持动画提供了高级且灵活的基础。此版本为 LayoutManager API 带来了一个令人兴奋的新功能:自动测量!这允许回收器视图根据其内容的大小调整自身大小。这意味着以前不可用的方案(例如对回收器视图的维度使用WRAP_CONTENT)现在可以实现。您会发现所有内置的布局管理器现在都支持自动测量。

我建议等待 Xamarin 包装的库(已经有一个测试版 https://www.nuget.org/packages/Xamarin.Android.Support.v4/23.2.0-beta1)