如何在方向更改中管理广告? (垂直广告,WP8)

时间:2013-01-05 02:00:32

标签: windows-phone-8

我目前正在开发一款兼容横向和纵向布局的应用。当方向从纵向变为横向时,我在处理旋转广告时遇到一些麻烦。我可以设置一个网格,这样广告就可以垂直。我可以旋转它但是当我这样做时它会搞砸。

我瞄准垂直的原因是它为我保留了最好的房地产。

我不确定我能为我的情况提供多少细节,我只想让广告旋转90度,使其适合横向屏幕的“左或右”。但旋转迫使它的网格仍然是一定的宽度。然后我在更改函数中放入一些控件来强制网格重新调整大小,但是在旋转之后,添加不会直接位于其网格中。这有什么建议或指示吗?非常感谢提前。

另外,我想要有两个简单地浮动在页面上的广告元素(不在网格中)。并根据方向显示/隐藏每个方向,但当我想到它时,这听起来很愚蠢。

3 个答案:

答案 0 :(得分:1)

我想我会告诉您,我创建了一个控件来处理手机的旋转并保持广告不动。有关详细信息,请按此SO answer

答案 1 :(得分:0)

使用具有正常宽度和高度的PubCenter广告,然后应用变换将其旋转90度。

答案 2 :(得分:0)

我无法找到帮助我的解决方案。我意识到我想要的是最后评论的帖子实现了;保持广告的轮换方向。

要完成此操作,可以使用LayoutTransform,但它们在WP8中不可用。最初我有浮动菜单,可以在旋转变化时打开和关闭,但在不同尺寸的屏幕上会很麻烦。

我发现最干净的蛮力解决方案是制作3x5(行主要)网格布局。我的主页面位于最中心的网格中,广告位于左侧,右侧和底部。最后,最左边和最右边的网格有两个填充空间:

    <Grid x:Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto "/>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Row="1" Grid.Column="2">
            <phone:Pivot x:Name="ContentPanel">
                ...
            </phone:Pivot>
        </Grid>

        <Grid Name="AdBottom" Grid.Row="2" Grid.Column="2">
            ...
        </Grid>

        <Grid Name="AdRight" Grid.Row="1" Grid.Column="3" MaxWidth="80">            
                <adduplex:AdControl x:Name="adDuplexAdRight" AppId="?????" 
                                    RenderTransformOrigin="0.5,0.5"
                                    HorizontalAlignment="Center" 
                                    VerticalAlignment="Center"
                                    Margin="-200,0" Visibility="Collapsed">
                <adduplex:AdControl.RenderTransform>
                    <CompositeTransform Rotation="90"/>
                </adduplex:AdControl.RenderTransform>
        </Grid>

        <Grid Name="AdLeft" Grid.Row="1" Grid.Column="1" MaxWidth="80">
            ... <As Above, just negated>
        </Grid>

        <Grid Name="FillerLeft" Grid.Row="1" Grid.Column="0" MinWidth="80" Visibility="Collapsed">
        </Grid>

        <Grid Name="FillerRight" Grid.Row="1" Grid.Column="4" MinWidth="80" Visibility="Collapsed">
        </Grid>            
    </Grid>

填充元素及其最小宽度的原因是为了帮助边缘溢出。没有它,你可以使用Rendertransform来旋转元素,但是当你试图将它的容器缩小到你想要的大小时,它就会错误地出现。这是因为在渲染之后旋转发生,因此如果没有那些额外的填充列以允许溢出,则元素在旋转时会被切片。

因此,执行溢出并扩展广告的边距允许它显示为锁定在网格而不是浮动。然后,我管理在旋转事件中切换广告的可见性和填充区域。

这是我用过的最简单的解决方案。其他人可以搜索合并Silverlight LayoutTransformer,如here所示。或者,如果使用付费工具包中的一个。到目前为止,这对我的简单应用程序起作用。