将Xamarin窗体视图呈现为Android视图,但不指定大小

将Xamarin窗体视图呈现为Android视图,但不指定大小,android,xamarin,xamarin.forms,Android,Xamarin,Xamarin.forms,我使用的是原生Xamarin.AndroidRecyclerView,如上所述回收视图管理屏幕上每个项目的一个视图(仅在我的应用程序中显示为垂直列表)。这很好: 不过,我真正想做的是定义一个Xamarin.Forms控件,并让RecyclerView使用它。我可以,而且可以(即,显示正确的数据): 然而,生成的Android视图总是将其高度和宽度设置为我传入的任何大小,即使我在任何地方都使用了Start的水平/垂直选项。我想要的是Android视图只占用它需要的空间(至少在垂直方向上;它可以自由

我使用的是原生Xamarin.Android
RecyclerView
,如上所述<代码>回收视图管理屏幕上每个项目的一个视图(仅在我的应用程序中显示为垂直列表)。这很好:

不过,我真正想做的是定义一个Xamarin.Forms控件,并让
RecyclerView
使用它。我可以,而且可以(即,显示正确的数据):

然而,生成的Android视图总是将其高度和宽度设置为我传入的任何大小,即使我在任何地方都使用了
Start
的水平/垂直选项。我想要的是Android视图只占用它需要的空间(至少在垂直方向上;它可以自由地水平扩展)


类似的问题,没有任何答案:

您可以使用本机UI控件

TextView
而不是
Label
LinearLayout
或其他
ViewGroup
而不是
ContentView

这些本机UI控件可以实现相同的目标,只需更改
TestViewHolder
类和
OnCreateViewHolder
方法,如下所示:

TestViewHolder

public class TestViewHolder : RecyclerView.ViewHolder
{

    public TextView Label { get; }

    public TestViewHolder(TextView label, Android.Views.View view) : base(view)
    {
        Label = label;

    }
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
    TextView tv = new TextView(parent.Context);
    tv.SetTextColor(Android.Graphics.Color.Black);
    tv.SetTextSize(Android.Util.ComplexUnitType.Dip,5.0f);
    tv.SetBackgroundColor(Android.Graphics.Color.Red);
    LinearLayout ll = new LinearLayout(parent.Context);
    ll.LayoutParameters=new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MatchParent, RecyclerView.LayoutParams.WrapContent);
    ll.SetBackgroundColor(Android.Graphics.Color.Green);
    ll.AddView(tv);

    return new TestViewHolder(tv,ll);
}
OnCreateViewHolder

public class TestViewHolder : RecyclerView.ViewHolder
{

    public TextView Label { get; }

    public TestViewHolder(TextView label, Android.Views.View view) : base(view)
    {
        Label = label;

    }
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
    TextView tv = new TextView(parent.Context);
    tv.SetTextColor(Android.Graphics.Color.Black);
    tv.SetTextSize(Android.Util.ComplexUnitType.Dip,5.0f);
    tv.SetBackgroundColor(Android.Graphics.Color.Red);
    LinearLayout ll = new LinearLayout(parent.Context);
    ll.LayoutParameters=new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MatchParent, RecyclerView.LayoutParams.WrapContent);
    ll.SetBackgroundColor(Android.Graphics.Color.Green);
    ll.AddView(tv);

    return new TestViewHolder(tv,ll);
}

例如,您是否使用了StartAndExpand并删除了大小值?您好,为什么不使用Android本机UI控件,我认为它比使用
Label
ContentView
更简单,因为你不需要考虑渲染。这是绝对必要的,这是一个嵌入式的原生控件,还是你会接受一个自定义渲染器绘制XF控件的方式,你描述它?因为我非常确定这是可行的,但相比之下,共享项目IDE支持非常糟糕(也许我的VS需要更新…@StephenCleary自定义渲染器也使用本机视图,所以您请求的实际挑战是让XF控件从本机android控件中呈现,就像看起来的那样。我会安排一些事情,然后再给你回电。@Dbl:是的。如果我理解正确,渲染器正是我想要的-应该有一个内置的渲染器来实现这一点。我只是无法正确调整大小。正如我在问题中提到的,是的,我知道我可以使用Xamarin.Android视图,这就是我现在在项目中所做的。问题是我如何使用Xamarin.Forms视图。@StephenCleary,你看过“”功能吗?@Vahid:看起来这对于页面级解决方案是可行的,但我需要一些可以由
RecyclerView
管理的东西。