gpt4 book ai didi

c# - 将 "Android.Views.ViewGroup"添加到 Xamarin XAML 页面

转载 作者:太空狗 更新时间:2023-10-29 17:58:51 26 4
gpt4 key购买 nike

我需要一些帮助来将 Android.Views.ViewGroup 添加到 XAML 页面。

我有一个 Xamarin 项目,其解决方案结构如下所示:

  • 应用程序 1
    • / View 模型
      • /MyPageViewModel.cs
    • / View
      • /MyPageView.xaml
        • /MyPageView.xaml.cs
  • App1.Android
    • /MainActivity.cs
    • /MainApplication.cs
  • App1.iOS
  • 我的安卓绑定(bind)项目
    • / jar
      • /customViewGroup.aar

请注意我使用 Xamarin Android 绑定(bind)库添加到解决方案中的 customViewGroup.aar

AAR 文件包含一个 Android.Views.ViewGroup 类,我想在 MyPage.xaml 上显示它,但我不知道该怎么做。我似乎找不到适合这个确切用例的指南或代码示例(我也找不到涉及将简单的 Android.Views.View 添加到 Xamarin XAML 页面的指南或代码示例)。

我找到了将 Android.Views.ViewGroup 添加到 native Android 应用程序(使用 Java 和 XML)的示例,但没有显示如何将其添加到 Xamarin XAML 页面。

请帮忙!


我包含了一些源代码,这样您就可以看到我尝试过的内容:

我的页面.xaml

<ContentPage 
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="App1.Views.MyPage"
xmlns:vm="clr-namespace:App1.ViewModels;"
xmlns:androidWidget="clr-namespace:Com.CustomAAR;assembly=Com.CustomAAR;targetPlatform=Android"
xmlns:formsAndroid="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.Platform.Android;targetPlatform=Android"
Title="{Binding Title}">
<ContentPage.Content>
<ContentView x:Name="contentViewParent">
<androidWidget:MyCustomViewGroup x:Arguments="{x:Static formsandroid:Forms.Context}">
</androidWidget:MyCustomViewGroup>
</ContentView>
<!--<ContentView
IsVisible="True"
IsEnabled="True"
BindingContext="{Binding MyCustomViewGroup}">
</ContentView>-->
</ContentPage.Content>
</ContentPage>

MyPage.xaml.cs

public partial class MyPage : ContentPage
{
MyCustomViewGroupModel viewModel;

public MyPage()
{
InitializeComponent ();
}

public MyPage(MyCustomViewGroupModel viewModel)
{
InitializeComponent();

#if __ANDROID__
NativeViewWrapper wrapper = (NativeViewWrapper)contentViewParent.Content;
MyCustomViewGroup myCustomViewGroup = (MyCustomViewGroup)wrapper.NativeView;

//myCustomViewGroup = new MyCustomViewGroup(Android.App.Application.Context);

myCustomViewGroup.SomeAction("");
#endif

BindingContext = this.viewModel = viewModel;
}
}

最佳答案

要在 Xamarin.Forms 页面中包含 native 控件,您需要创建自定义控件和平台呈现器。查看official documentation完整演练。

简而言之,您首先要在您的共享项目中声明一个新控件:

public class MyCustomViewControl : View
{

}

现在在 Android 项目中创建一个自定义渲染器,它将使用您的自定义 Android View 进行本地显示:

public class MyCustomViewRenderer : ViewRenderer<MyCustomViewControl, MyCustomViewGroup>
{
MyCustomViewGroup viewGroup;

public MyCustomViewRenderer(Context context) : base(context)
{
}

protected override void OnElementChanged(ElementChangedEventArgs<MyCustomViewControl> e)
{
base.OnElementChanged(e);

if (Control == null)
{
viewGroup= new MyCustomViewGroup(Context);
SetNativeControl(viewGroup);
}
}
}

您还将使用渲染器在 native 端设置事件等。

渲染器由 Xamarin.Forms 识别和注册,这要归功于属性,该属性可以与命名空间上方的 Renderer 位于同一文件中:

[assembly: ExportRenderer (typeof(MyCustomViewControl), typeof(MyCustomViewRenderer))]

关于c# - 将 "Android.Views.ViewGroup"添加到 Xamarin XAML 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48447283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com