布局参数更改仅在全屏模式下生效
本文关键字:模式 参数 布局 | 更新日期: 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)