Xamarin.Forms 背景图片

Posted

技术标签:

【中文标题】Xamarin.Forms 背景图片【英文标题】:Xamarin.Forms BackgroundImage 【发布时间】:2016-09-07 19:35:31 【问题描述】:

我想为整个应用实现一个背景图片。

我在 android 上使用全局 style.xml <item name="android:windowBackground">@drawable/appbg</item>。如何在 ios 上实现这一点?

这样的事情可能吗?

public override bool FinishedLaunching(UIApplication app, 
  NSDictionary options)

  ...
  UIWindow.Appearance.BackgroundColor = UIColor.FromPatternImage(
    UIImage.FromFile("appbg.jpg"));
  ...

【问题讨论】:

【参考方案1】:

我使用 CustomNavigationPageRenderer 解决了这个问题。

[assembly: ExportRenderer(typeof(OIdx.XForms.Pages.CustomNavigationPage), 

typeof(OIdx.XForms.iOS.Renderers.CustomNavigationPageRenderer))]
namespace OIdx.XForms.iOS.Renderers

    class CustomNavigationPageRenderer : NavigationRenderer
    
        public override void ViewDidLoad()
        
            base.ViewDidLoad();
            var img = UIImage.FromBundle("appbg5.jpg");
            UIImageView iv = new UIImageView(img);
            iv.Layer.ZPosition = -1;
            this.View.AddSubview(iv);
        
    

【讨论】:

谢谢你,但我还不能让它为我工作。被覆盖的 ViewDidLoad() 被调用,但应用程序没有改变。有什么想法吗?您还需要做些什么才能使其正常工作吗? 好的,知道了。我只需要给我的 XF 页面的 ContentPage 元素一个透明背景。谢谢!【参考方案2】:

第一个:在您的AppDelegate 中,通过UIColor.FromPatternImage 分配Window.BackgroundColorUIIamge

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)

    Window.BackgroundColor = UIColor.FromPatternImage(new UIImage("background.png"));
    return true;

第二个:在您希望看到此背景的每个View 中,您必须将UIColor 设置为Clear

View.BackgroundColor = UIColor.Clear;

注意:应使用多种图像尺寸,以便每个设备都能获得适合分辨率的图像。

仅供参考:这是影响应用程序整个生命周期的内存消耗,如果这不是纹理/平铺图像(iOS 或 Android)并且实际上是 单个 图像,那就太糟糕了实际上跨越了整个屏幕。

【讨论】:

如果我设置 BackgroundColor 这个错误出现Foundation.ModelNotImplementedException: Exception of type 'Foundation.ModelNotImplementedException' was thrown. @mlauth 您是否有未覆盖 Window 属性的自定义 UIApplicationDelegate?或者从模板创建的AppDelegate 中删除Window 属性?使用带有 iOS4 的非常旧版本的 Xamarin.iOS?,使用来自 repo 的非常旧/过时的代码? 为了测试这个,我刚刚创建了一个测试项目,据我所知,一切都是最新的。 Visual Studio 和 Xamarin Studio 中的相同错误。 @mlauth 在创建的AppDelegate 中是否有覆盖的Window 属性? @Jonathan 在下面看到我的答案,这应该可以。对于 Android,请使用 style.xml。

以上是关于Xamarin.Forms 背景图片的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 选取器选择背景颜色

单击按钮上的 Xamarin.Forms 动画(Flash 背景)

Xamarin.Forms 更改应用程序的背景颜色

Xamarin.Forms踩坑集锦(持续更新)

Xamarin.Forms中实现CheckBox控件

Xamarin.Forms学习之位图