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.BackgroundColor
和UIIamge
:
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 背景图片的主要内容,如果未能解决你的问题,请参考以下文章