Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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 Xamarin表单、RecyclerView、来自xaml的单元渲染_Android_Android Recyclerview_Xamarin.forms_Custom Renderer_Cellrenderer - Fatal编程技术网

Android Xamarin表单、RecyclerView、来自xaml的单元渲染

Android Xamarin表单、RecyclerView、来自xaml的单元渲染,android,android-recyclerview,xamarin.forms,custom-renderer,cellrenderer,Android,Android Recyclerview,Xamarin.forms,Custom Renderer,Cellrenderer,我想在Xamarin.Forms中创建控件,该控件使用本机android RecyclerView作为呈现程序 当我尝试创建包含标签或其他控件的单元格时,会出现问题,其水平选项不同于:Default、Fill和FillAndExpand。标签不会自动呈现。这是我的.xaml单元代码 我个人认为这是一个在网格中使用水平标签选项的错误。不确定,您可以尝试在Bugzilla中提交此问题 默认情况下设置为LayoutOptions.Fill,当此属性默认设置或设置为FillAndExpand时,它会工

我想在Xamarin.Forms中创建控件,该控件使用本机android RecyclerView作为呈现程序

当我尝试创建包含标签或其他控件的单元格时,会出现问题,其水平选项不同于:Default、Fill和FillAndExpand。标签不会自动呈现。这是我的.xaml单元代码


我个人认为这是一个在网格中使用水平标签选项的错误。不确定,您可以尝试在Bugzilla中提交此问题

默认情况下设置为LayoutOptions.Fill,当此属性默认设置或设置为FillAndExpand时,它会工作,其他具有不同水平选项的标签在我旁边的宽度为0,这就是为什么只显示一些标签

解决此问题的一个解决方法是向这些标签提供宽度为0的宽度请求,但请注意

指定“水平选项”可修改当父布局沿X轴有多余可用空间时元素的布局方式。此外,它还指定元素是否应消耗父布局X轴上的剩余空间。如果布局的多个子项设置为展开,则额外空间将按比例分布


此处的宽度应小于父级,以查看不同布局选项的结果

我找到了答案。我的问题确实与水平选项有关,你的说明很有用

。。。此外,它还指定元素是否应消耗父布局X轴上的剩余空间

我刚刚将父视图添加到我的viewHolder的XF版本中。在这里你可以看到我改变了什么:

public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
    {
        FormsRecyclerCell fastCell;

        fastCell = this.Element.ItemTemplate.CreateContent() as FormsRecyclerCell;

        var view = new FormsRecyclerViewCellContainer(parent.Context, fastCell, parent, this.Element.ItemWidth, this.Element);
        if (this.SelectionEnabled)
        {
            view.Click += MainView_Click;
        }

        //--------------**-----------------
        //Here i added XF parent to XF cell
        fastCell.Parent = this.Element;

        var dpW = this.ConvertDpToPixels(this.Element.ItemWidth);
        var dpH = this.ConvertDpToPixels(this.Element.ItemHeight);
        view.SetMinimumWidth(dpW);
        view.SetMinimumHeight(dpH);
        view.LayoutParameters = new GridLayoutManager.LayoutParams(dpW, GridLayoutManager.LayoutParams.WrapContent);
        return new FormsRecyclerViewCell(view);
    }
这仅仅是一行代码,现在标签在水平选项的每一个设置中都能完美地工作。这很难找到,因为本机android ViewHolder有本机父级,所以我认为XF VievHolder会立即从渲染器获得与XF版本相同的父级。我错了,我不得不自己决定

我现在知道,从.xaml开始的所有计算都是在Xamarin.Forms的核心中实现的,并且要进行正确的计算,孩子们必须有他们的父母