gpt4 book ai didi

c# - Xamarin Forms - 如何让 View (广告)在所有页面上都有一个实例?

转载 作者:行者123 更新时间:2023-12-01 22:23:07 25 4
gpt4 key购买 nike

我想使用 xamarian 表单在我的应用程序中包含横幅广告。假设我有一个广告 View ,并且我想将其放置在我的应用程序中,该应用程序在所有页面上都使用 iOS、Android 和 UWP 上的导航。

如何使所有页面的广告 View 实例都相同?

最好我不想重新加载每个页面的广告 View ,而是希望它在每个页面中都存在而不被重新加载。我认为它可能是两种方式之一,一种总是在屏幕上,如导航栏,内容在添加下方呈现,另一种方式是 View 在每个页面上,但加载单个实例跨所有页面。

最佳答案

这是一个很好的方法。
转到 App.xaml 并声明以下资源:

...
<controls:AdViewControl AdUnitId="YOUR_UNIT_ID" BackgroundColor="#FFFFFF"
HeightRequest="50" x:Key="AdViewControl1"/>

<ControlTemplate x:Key="AdOnFooterPage">
<Grid BackgroundColor="#FFFFFF">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ContentView Content="{StaticResource AdViewControl1}" Grid.Row="1"/>
</Grid>
</ControlTemplate>
...
接下来是将 ControlTemplate 与要显示广告的页面链接:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
mc:Ignorable="d"
x:Class="BdvAssistant.Views.Recharge.RechargePage"
Title="Page 1"
ControlTemplate="{StaticResource AdOnFooterPage}">
...
(这是可选的)如果您的导航缓存页面,您将需要取消 AdViewControl 与旧父级(ControlTemplate)的链接并将其分配给新父级。这里是一个MasterDetailPage的例子,下面的代码应该适应MainPage。
public partial class MainPage : MasterDetailPage
{
private readonly Dictionary<MenuItemType, NavigationPage> _menuPages
= new Dictionary<MenuItemType, NavigationPage>();

private readonly Dictionary<MenuItemType, ContentView> _adContentViews
= new Dictionary<MenuItemType, ContentView>();

private AdViewControl AdControl => (AdViewControl)Application.Current.Resources["AdViewControl1"];

public MainPage()
{
InitializeComponent();
}

public async Task NavigateFromMenu(MenuItemType menu)
{
if (AdControl.Parent is ContentView parent)
parent.Content = null;

if (_menuPages.TryGetValue(menu, out var newPage))
{
if (_adContentViews.TryGetValue(menu, out var adParent))
adParent.Content = AdControl;
}
else
{
switch (menu)
{
case MenuItemType.Dashboard:
newPage = new NavigationPage(new DashboardPage());
break;
case MenuItemType.Security:
newPage = new NavigationPage(new PinManagerPage());
break;
default:
return;
}

_adContentViews[menu] = AdControl.Parent as ContentView;
_menuPages[menu] = newPage;
}

if (ReferenceEquals(Detail, newPage))
return;

Detail = newPage;

if (MasterBehavior == MasterBehavior.Popover)
{
if (Device.RuntimePlatform == Device.Android)
await Task.Delay(200);

IsPresented = false;
}
}
}

关于c# - Xamarin Forms - 如何让 View (广告)在所有页面上都有一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43713932/

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