作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 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/
我是一名优秀的程序员,十分优秀!